【问题标题】:How to convert VARCHAR column cell values to date format?如何将 VARCHAR 列单元格值转换为日期格式?
【发布时间】:2020-12-08 02:29:59
【问题描述】:

我已将客户数据转换为 DB 表,其中列类型 Varchar 中的单元格值很少,包含日期和少数不包含日期。包含特定格式的日期的,需要转换成另一种格式,以便进一步用于数据分析工作。我尝试了以下查询,但它显示了没有日期的单元格的错误。我该如何解决这个问题?

基本上我想去掉实际时间并附加 000000 代替实际时间以及日期。

查询:

UPDATE Table1 
SET C1 = DATE_FORMAT(C1,'%Y%m%d000000') 
WHERE DATE_FORMAT(C1,'%Y%m%d%H%i%s') AND C1 IS NOT NULL;

错误:

代码:1292 截断不正确的日期时间值:'EVN'

【问题讨论】:

  • 请向我们展示您的数据是什么样的,以及您想要哪种输出。请注意,错误消息表明您在 c1 列中有字符串 'EVN' - 无论格式如何,这肯定看起来不像是有效日期。
  • 我的数据有 C1 列,它是 VARCHAR 类型。 C1 包含多个日期字符串和其他字符串,如 EVN、ACT 等。下面是示例。请参阅随附的屏幕截图。
  • DATE_FORMAT() 用于将日期时间转换为字符串。要走另一条路,请使用STR_TO_DATE()
  • 使用STR_TO_DATE('%m/%d/%y', C1)

标签: mysql sql string datetime


【解决方案1】:

您需要使用STR_TO_DATE() 来解析VARCHAR 列中的日期。

您可以使用正则表达式来测试该列是否包含 MM/DD/YY 格式的日期。

UPDATE Table1
SET C1 = DATE_FORMAT(STR_TO_DATE('%m/%d/%y', C1), '%Y%m%d000000')
WHERE C1 RLIKE '^[01][0-9]/[0-3][0-9]/[0-9][0-9]$'

【讨论】:

  • Nup,上面没有工作,因为 DATE_FORMAT(date, format) 是语法。您的建议是什么,尝试查找 %Y%m%d000000 字符串并尝试转换为日期。我正在寻找的是,找到 %m/%d/%y 并转换为 %Y%m%d000000
  • 我也在下面尝试过,但它仍然显示不是日期的单元格值的错误/警告。 UPDATE Table1 SET C1 = DATE_FORMAT(STR_TO_DATE(C1, '%m/%d/%y'),'%Y%m%d%H%i%s') WHERE DATE_FORMAT(STR_TO_DATE(C1, '%m/% d/%y'),'%m/%d/%y');错误:1899 行受影响,58 个警告执行时间:0.183 秒警告代码:1411 日期时间值不正确:函数 str_to_date 的“2.16.840.1.113883.3.526.3.1006”
  • 我永远记不起参数顺序,我假设您在问题中的顺序正确,而不是检查文档。我已将答案更改为使用正则表达式而不是调用 STR_TO_DATE() 来测试列是否为 MM/DD/YY 格式。
猜你喜欢
  • 1970-01-01
  • 2013-08-13
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多