MySQL查询以选择带有日期的记录
Posted
技术标签:
【中文标题】MySQL查询以选择带有日期的记录【英文标题】:MySQL query to select records with date 【发布时间】:2022-01-10 05:54:23 【问题描述】:我有一个数据库,其中 data_fine
定义为 TEXT
并包含诸如“25-05-2021
”之类的值。我需要查找当前日期到 8 天之间的所有记录。
我尝试了以下查询,但没有显示任何内容。
SELECT * from tabella_raw where data_fine > DATE(NOW) and data_fine < DATE(NOW() + INTERVAL 8 DAYS)
将存储为TEXT
的日期与当前日期进行比较的最佳且安全的方法是什么?
【问题讨论】:
这能回答你的问题吗? How to convert a string to date in mysql? 部分地,@nbk 答案是我正在寻找的正确答案。 【参考方案1】:您必须转换花费大量处理器时间的日期,因此您应该避免这种情况并将所有日期保存在 MySQL 日期 yyyy-MM-dd hh:mm:ss
您也可以使用 CURDATE() 获取当前日期
INTERVAL的最后一个参数是DAY
not DAYS
SELECT STR_TO_DATE("25-05-2021",'%d-%m-%Y');
SELECT * from tabella_raw where STR_TO_DATE(data_fine,'%d-%m-%Y') > Curdate() and STR_TO_DATE(data_fine,'%d-%m-%Y') < CURDATE() + INTERVAL 8 DAY;
【讨论】:
在这种情况下,它是一个 FULL TABLE SCAN 并且没有使用索引 我怀疑他有没有密钥长度的密钥规范中使用的密钥 `BLOB/TEXT 列 'data_fine' ?`` 否则他会切换 完美运行!【参考方案2】:尝试使用STR_TO_DATE函数
SELECT * from tabella_raw where STR_TO_DATE(data_fine, '%d-%m-%Y') > DATE(NOW) and STR_TO_DATE(data_fine, '%d-%m-%Y') < DATE(NOW() + INTERVAL 8 DAYS)
【讨论】:
【参考方案3】:您正在尝试将文本字段用作日期,因此您需要将文本转换为日期才能使用日期函数。
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于MySQL查询以选择带有日期的记录的主要内容,如果未能解决你的问题,请参考以下文章