【问题标题】:MySQL query to select records with dateMySQL查询以选择带有日期的记录
【发布时间】: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 的日期与当前日期进行比较的最佳且安全的方法是什么?

【问题讨论】:

标签: mysql datetime phpmyadmin


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 2017-09-21
    • 1970-01-01
    • 2013-04-11
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多