【问题标题】:How to convert timestamp from Oracle to Mysql如何将时间戳从 Oracle 转换为 Mysql
【发布时间】:2020-10-07 03:59:03
【问题描述】:

我正在尝试将时间戳从 Oracle 转换为 Mysql。我有一个数据文本文件,试图在 MySQL 数据库中加载数据,但出现 SQL 语法错误。请帮忙

LOAD DATA INFILE '/check/value.txt' INTO TABLE TEST FIELDS TERMINATED BY '|' (ID, @DATETIME) SET DATETIME = CONVERT_TZ(REPLACE(SUBSTRING_INDEX(@DATETIME, '-', 3),"T"," "), "-07:00", "+00:00");

时间戳示例 - 2020-10-07T05:21:05-7:00。

下面是错误

 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET DATETIME = CONVERT_TZ(REPLACE(SUBSTRING_INDEX(@DATETIME, '-', 3),"T"," "), "-07:00", "+00:00")' 

【问题讨论】:

  • 尝试参考以下链接。 stackoverflow.com/questions/38125393/…
  • @CDN 在我的情况下输入格式不同,它不适合我
  • 1) MySQL 将@time 视为用户定义的变量。它是否显示了价值? 2) 该值包含多余的T-7:00,这些在模式中未提及。 3) MySQL 不能通过这种方式使用时区信息(在 datetime 文字中),它只能在没有 timezone 的 clear datetime 下运行。 4) Set time 中的 time 被视为局部变量,在复合语句之外是不合法的。 遇到 SQL 语法错误我们没有看到错误消息文本...
  • 您的 LOAD DATA 语句在语法上不正确。如果DATETIMETEST 表结构中的列名,则必须用反引号将其包装起来,因为DATETIME 是保留字。
  • @Akina 我已将列名从 'DATETIME' 更改为 'LASTTIME' 并根据需要更改 LOAD 查询但得到相同的错误

标签: mysql unix unix-timestamp


【解决方案1】:

你可以试试这个:

SELECT CONVERT_TZ(REPLACE(SUBSTRING_INDEX("2020-10-07T05:21:05-7:00", '-', 3),"T"," "), "-07:00", "+00:00");

【讨论】:

  • @Sanjoy:这是一个变通解决方案。请让我知道它是否适合您!
  • 通常时区偏移也可能是正数 - 在这种情况下,您的查询将失败。从文字中检索时区偏移更正确。
  • @Akina;我同意你的看法。在这种情况下,OP 必须在时区中保持正值和负值的条件。我已经给出了一个解决方案,如何从 Oracle 转换为 MySQL 对话格式(解决方法)!
  • @SKM 它对我不起作用,出现相同的语法错误
  • 解决方案链接:dbfiddle.uk/…
【解决方案2】:
SET @time := '2020-10-07T05:21:05-7:00';
SELECT CONVERT_TZ(STR_TO_DATE( @time, '%Y-%m-%dT%H:%i:%s'),            -- datetime only
                  REGEXP_SUBSTR(@time, '[\+\-][0-9]{1,2}:[0-9]{2}$'),  -- timeshift only
                  '+00:00') AS datetime_GMT;

fiddle

【讨论】:

  • 看起来,我的解决方案没用。我应该删除我的帖子吗?
  • @SKM 我看不出原因。此外-您的答案删除将删除其所有几乎不好的 cmets。
猜你喜欢
  • 1970-01-01
  • 2021-06-21
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多