【问题标题】:Find results in certain date range查找特定日期范围内的结果
【发布时间】:2023-03-20 04:43:01
【问题描述】:

我试图只抓取特定日期范围内的记录。问题是时间戳和日期作为字符串存储在同一个单元格中。我只想抓取日期介于 2013-05-01 和 2013-05-03 之间的行。

日期(存储为字符串)

2013-05-01T23:19:44
2013-05-02T23:19:40
2013-05-06T23:19:46
2013-05-06T23:15:17

mysql

SELECT * FROM table WHERE date BETWEEN 2013-05-01 AND 2013-05-03

【问题讨论】:

  • 步骤 1) 转换为 datetime 字段。第 2 步)SELECT columnList FROM tbl WHERE dateCol >= '2013-05-01 00:00:00' AND dateCol <= '2013-05-03 23:59:59'
  • @FreshPrinceOfSO:... where date(datecol) between '2013-05-01' and '2013-05-03',当然是在日期时间转换之后
  • @MarcB 我不会使用date(),因为如果该列上有索引,它将不会被使用。

标签: mysql sql date search


【解决方案1】:

试试

SELECT *
  FROM table1
WHERE STR_TO_DATE(`date`,'%Y-%m-%d') BETWEEN '2013-05-01' AND '2013-05-03'

SQLFiddle

正如@FreshPrinceOfSO 绝对正确指出的那样,在这种情况下不会使用任何索引

【讨论】:

  • @FreshPrinceOfSO 请参阅 sqlfiddle。
  • 可能要提一下,这里将使用no索引,他们真的需要使用datetime
【解决方案2】:
SELECT * FROM table1 
WHERE STR_TO_DATE(SUBSTRING(`date`,1,10),'%d-%m-%Y') 
    BETWEEN '2013-05-01' AND '2013-05-03'

【讨论】:

  • @FreshPrinceOfSO:这是因为“桌子”。我将其重命名为“table1”
  • 您实际上缺少 STR_TO_DATE 的右括号,但现在已修复。
【解决方案3】:

对于datetime,字符串几乎是有效的语法。因此,另一种可能较慢的方法是将“T”替换为空格,然后将其转换为datetime

SELECT * FROM table1 WHERE
  CAST(REPLACE(`date`, 'T', ' ') AS DATETIME) 
  BETWEEN '2013-05-01' AND '2013-05-03';

【讨论】:

    【解决方案4】:
    SELECT * FROM table 
    WHERE date('yourdate') BETWEEN date('2013-05-01') AND date('2013-05-03')
    

    【讨论】:

    • 请为您的回答提供一些解释。
    猜你喜欢
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多