我在将 CSV 导入 MySQL 表时遇到了问题,因为我无法使 DATE 或 DATETIME 字段正常工作。我尝试使用 LOAD DATA INFILE,但没有成功。
因此我将所有 DATE 或 DATETIME 字段更改为 VARCHAR,并且最终加载了所有数据。
但现在我需要更新 VARCHAR 字段中的日期以仅显示如下日期格式:
yyyy-mm-dd
因此我尝试运行这个查询:
UPDATE `table` SET
`CreatedDate` = STR_TO_DATE(CreatedDate, '%Y-%M-%D'),
`LastClickDate` = STR_TO_DATE(LastClickDate, '%Y-%M-%D'),
`LastOpenDate` = STR_TO_DATE(LastOpenDate, '%Y-%M-%D'),
`LastSendDate` = STR_TO_DATE(LastSendDate, '%Y-%M-%D'),
`LastUnsubscribeDate` = STR_TO_DATE(LastUnsubscribeDate, '%Y-%M-%D')
但我收到以下错误:
Incorrect datetime value: '6/25/2024 5:19:22 PM' for function str_to_date
数据库表日期列具有类似以下的结构:
ColumnName: CreatedDate
Type: varchar(30)
Collation: utf8mb4_general_ci
Attributes: Yes
Default: NULL
我如何使上述查询正常工作,以便日期可以以 yyyy-mm-dd 格式显示?
您混淆
STR_TO_DATE()
了DATE_FORMAT()
。STR_TO_DATE()
解析包含非标准日期时间格式的字符串。DATE_FORMAT()
假定输入是格式正确的 MySQL 日期时间,并输出指定的格式,该格式可能是非标准的。您有非标准字符串,因此
STR_TO_DATE()
使用正确的函数,但您必须告诉它字符串当前具有什么格式。例子:
请注意,我的格式字符串
'%m/%d/%Y %I:%i:%s %p'
与您字符串的当前格式相匹配(有关格式代码的参考文档,请参阅https://dev.mysql.com/doc/refman/8.4/en/date-and-time-functions.html#function_date-format )。输出
STR_TO_DATE()
自动采用 MySQL 标准日期时间格式:YYYY-MM-DD HH:MM:SS。如果您想要格式化而不包含时间部分,则可以使用
DATE_FORMAT()
以下结果STR_TO_DATE()
:或者您可以将其转换为以下
DATE
类型: