【问题标题】:Convert String Value to Date/Datetime in mySQL在 mySQL 中将字符串值转换为日期/日期时间
【发布时间】:2016-07-13 07:47:37
【问题描述】:

我正在将 DB2 表加载到 mysql 中,但在加载日期格式的数据时遇到了问题。

我将这些列转换为 VARCHAR(26) 格式并成功加载数据。

现在我想将 2003-01-13-16.50.32.000000 转换为日期格式。

我介绍了另一个具有日期数据类型的列,并尝试使用原始(字符串)列对其进行更新。

update po_datamart
    set POH_APPROVED_DATE_TEMP=DATE_FORMAT(str_to_date(POH_APPROVED_DATE,'%Y-%c-%d-%H.%i.%s'), '%Y-%c-%d%H:%m:%s');

我收到以下错误“错误代码:1292。截断不正确的日期时间值:'2003-01-13-16.50.32.000000'”。

如果有人能帮助我完成 VARCHAR 到 DATE 的转换,我们将不胜感激。

【问题讨论】:

  • 请避免用同样冗长的评论来抨击每个答案。相反,您可以更新您的问题。

标签: mysql


【解决方案1】:

使用带有适当格式掩码的STR_TO_DATE

SELECT STR_TO_DATE('2003-01-13-16.50.32.000000', '%Y-%m-%d-%H.%i.%s.%f')

如果你想更新:

UPDATE po_datamart
SET POH_APPROVED_DATE_TEMP = STR_TO_DATE(POH_APPROVED_DATE, '%Y-%m-%d-%H.%i.%s.%f')

点击以下链接查看正在运行的演示:

SQLFiddle

【讨论】:

  • 你好,蒂姆。感谢您的回复。当我触发您的选择查询时,我得到的响应为 NULL 值。当我运行您的更新查询时,我得到“错误代码:1411。不正确的日期时间值:'2003-01-13-16.50.32.000000' for function str_to_date”
  • @user2663104 抱歉,我已经更新,现在可以使用了。我使用%h 12 小时而不是%H 24 小时。
  • UPDATE po_datamart SET POH_APPROVED_DATE_TEMP = STR_TO_DATE(POH_APPROVED_DATE, '%Y-%m-%d-%H.%i.%s.%f') - 此查询有效,但再次以响应结束 - "错误代码:1411。日期时间值不正确:函数 str_to_date 的 '+0.00000000000000E+000'"
  • 您输入的实际字符串数据是什么?看起来您使用的是非标准格式。
  • 我使用了 .del 文件,它是 DB2 中旧数据仓库表的转储文件。我使用 LOAD INLINE 功能上传表中的数据(MySQL)。
【解决方案2】:
UPDATE      po_datamart
    SET     POH_APPROVED_DATE_TEMP = str_to_date(POH_APPROVED_DATE, '%Y-%m-%d-%H.%i.%s.%f');

【讨论】:

  • UPDATE po_datamart SET POH_APPROVED_DATE_TEMP = STR_TO_DATE(POH_APPROVED_DATE, '%Y-%m-%d-%H.%i.%s.%f') - 此查询有效,但再次以响应结束 - "错误代码:1411。日期时间值不正确:函数 str_to_date 的 '+0.00000000000000E+000'"
  • 你用的是什么版本的 MySQL?
【解决方案3】:

我认为你只需要和空间,尝试:

set POH_APPROVED_DATE_TEMP=DATE_FORMAT(str_to_date(POH_APPROVED_DATE,'%Y-%c-%d-%H.%i.%s'), '%Y-%c-%d %H:%m:%s');

我将最后一个字符串'%Y-%c-%d%H:%m:%s' 更改为'%Y-%c-%d %H:%m:%s'

更新 date 列:

set POH_APPROVED_DATE_TEMP=DATE_FORMAT(str_to_date(POH_APPROVED_DATE,'%Y-%c-%d-%H.%i.%s'), '%Y-%c-%d');

【讨论】:

  • 感谢您的回复。我得到的响应是“错误代码:1292。截断不正确的日期时间值:'2003-01-13-16.50.32.000000'”
  • 我尝试了代码,似乎工作正常;什么数据类型有POH_APPROVED_DATE_TEMP(日期、日期时间、其他?)。如果该列是date 类型,则数据将被截断,您将2003-01-13 16:50:32 与仅允许2003-01-13 的列一起使用。我相应地编辑答案。
  • 我正在使用日期。我应该使用日期时间吗?
  • 阅读我的答案,如果是日期时间列的第一个代码,但我对日期列进行了更新。随意使用。
  • UPDATE po_datamart SET POH_APPROVED_DATE_TEMP = STR_TO_DATE(POH_APPROVED_DATE, '%Y-%m-%d-%H.%i.%s.%f') - 此查询有效,但再次以响应结束 - "错误代码:1411。日期时间值不正确:函数 str_to_date 的 '+0.00000000000000E+000'"
【解决方案4】:

试试这个:

update po_datamart set POH_APPROVED_DATE_TEMP = str_to_date(POH_APPROVED_DATE, '%Y-%m-%d-%H.%i.%s.%f');

【讨论】:

  • 感谢您的回复。错误代码:1292。截断不正确的日期时间值:'2003-01-13-16.50.32.000000' 出现上述错误。
  • POH_APPROVED_DATE的类型是varchar还是date?
  • POH_APPROVED_DATE 的类型是 varchar
  • @user2663104 更新了我的答案,请再次查看。
  • UPDATE po_datamart SET POH_APPROVED_DATE_TEMP = STR_TO_DATE(POH_APPROVED_DATE, '%Y-%m-%d-%H.%i.%s.%f') - 此查询有效,但再次以响应结束 - "错误代码:1411。日期时间值不正确:函数 str_to_date 的 '+0.00000000000000E+000'"
猜你喜欢
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2011-12-16
  • 2014-05-24
  • 1970-01-01
相关资源
最近更新 更多