php - 按存储为 Varchar 的日期时间过滤 MySQL 查询
问题描述
我正在尝试通过存储日期时间值但使用 varchar 数据类型的字段来过滤 MySQL 查询。
示例数据:
格林威治标准时间 21 年 1 月 14 日 16:56:41
示例代码:
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
.
推荐阅读
- java - 如何使用 sqlite 数据库存储 fetch 数据和检索
- c# - Automapper 7.0.1 ProjectTo 不匹配类型与 ef core 2.1.1 linq join
- c# - TreeView - 绑定
- corda - Corda 状态存储
- hibernate - 未能延迟初始化异常
- php - 如果指定提及的用户名中的文本,则不要插入此用户名
- arduino - 无法连接到 Losant MESSAGE:mqttClient.state -1
- solr - 多值字段上的 Solr 短语搜索
- azure - 为什么 asp.net web api 请求第一次需要时间?
- scala - Scala:如何在不使用 var 的情况下实现以下内容