警告:#1411日期时间值不正确:函数str_to_date的'1/1/2019 9:52 AM'

时间:2019-02-13 10:00:52

标签: php mysql

我想获取MySQL中两个日期之间的所有数据。 。我使用以下代码使其可行:

SELECT * FROM checkinout WHERE PIN = 214 
 AND (STR_TO_DATE(CHECKTIME, '%n/%j/%Y %h:%i %l') 
 between '1/1/2019 12:00:01 AM' and '1/1/2019 11:59:59 PM') 
 ORDER BY checkId ASC

我的CHECKTIME表是varchar,我的日期格式是:Month/Day/Year Hour:Minute A/PM。但是当我运行此命令时,它将返回如下错误:

Warning: #1411 Incorrect datetime value: '1/1/2019 9:52 AM' for function str_to_date

我在网上搜索了3个小时。但是没有任何帮助。 你能告诉我我需要改变的地方吗? 谢谢。

1 个答案:

答案 0 :(得分:3)

正如上面的注释正确指出的那样,您应该避免将日期以文本形式存储在MySQL表中。请改用正确的日期列。现在,解决两个问题,首先,您使用STR_TO_DATE错误地解析了日期字符串。您应该使用以下遮罩:

%m/%d/%Y %h:%i %p

这是您更新的查询:

SELECT *
FROM checkinout
WHERE
    PIN = 214 AND
    STR_TO_DATE(CHECKTIME, '%m/%d/%Y %h:%i %p') BETWEEN '2019-01-01 00:00:01' AND
        '2019-01-01 23:59:59'
ORDER BY checkId;

除了修复时间戳掩码外,还请注意,我在WHERE子句中使用了有效的MySQL日期/时间戳文字。