按存储为 Varchar 的日期时间过滤 MySQL 查询
Filter MySQL Query By DateTime Stored As Varchar
我正在尝试按存储日期时间值但使用 varchar 数据类型的字段过滤 MySQL 查询。
示例数据:
16:56:41 格林威治标准时间 01/14/21
示例代码:
SELECT * FROM table_name WHERE STR_TO_DATE(datetime,'%H:%i:%S %m/%d/%y') BETWEEN '00:00:00 01/14/21' AND '23:59:59 01/14/21'"
查询当前没有返回任何内容。但是下面的代码有效:
SELECT * FROM table_name
如有任何想法,我们将不胜感激。
您对 STR_TO_DATE
的使用是正确的,但是您的日期字面值是错误的。修复它们,您的查询应该有效:
SELECT *
FROM table_name
WHERE STR_TO_DATE(datetime,'%H:%i:%S %m/%d/%y') >= '2021-01-14' AND
STR_TO_DATE(datetime,'%H:%i:%S %m/%d/%y') < '2021-01-15';
以上假设您希望记录发生在 2021 年 1 月 14 日,正确的。请注意,我们甚至不需要包含 H:M:S 组件,只需使用日期文字即可。
最好使您的 datetime
列成为正确的日期时间类型列,而不是文本。这将避免需要使用 STR_TO_DATE
.
我正在尝试按存储日期时间值但使用 varchar 数据类型的字段过滤 MySQL 查询。
示例数据:
16:56:41 格林威治标准时间 01/14/21
示例代码:
SELECT * FROM table_name WHERE STR_TO_DATE(datetime,'%H:%i:%S %m/%d/%y') BETWEEN '00:00:00 01/14/21' AND '23:59:59 01/14/21'"
查询当前没有返回任何内容。但是下面的代码有效:
SELECT * FROM table_name
如有任何想法,我们将不胜感激。
您对 STR_TO_DATE
的使用是正确的,但是您的日期字面值是错误的。修复它们,您的查询应该有效:
SELECT *
FROM table_name
WHERE STR_TO_DATE(datetime,'%H:%i:%S %m/%d/%y') >= '2021-01-14' AND
STR_TO_DATE(datetime,'%H:%i:%S %m/%d/%y') < '2021-01-15';
以上假设您希望记录发生在 2021 年 1 月 14 日,正确的。请注意,我们甚至不需要包含 H:M:S 组件,只需使用日期文字即可。
最好使您的 datetime
列成为正确的日期时间类型列,而不是文本。这将避免需要使用 STR_TO_DATE
.