我想获取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个小时。但是没有任何帮助。 你能告诉我我需要改变的地方吗? 谢谢。
答案 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日期/时间戳文字。