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的最后一个参数是DAYnot 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查询以选择带有日期的记录的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 查询以选择有或没有日期的行

如何在查询语句 Mysql 中格式化日期?

Mysql查询使用两个日期之间检索记录

Mysql 查询获取日期时间紧跟当前日期时间之后的记录

MySQL 5 亿行表在带有连接的选择查询中

以选择为条件的mysql更新查询