mrp*_*atg 10 mysql sql datetime
我使用以下查询来定位比当前时间早X天的结果.
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY
AND SYSDATE()
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)
问题是,从当天其返回的数据,如果从正好是30天前的记录犯规存在,以及不相关的数据
有更好的方法吗?
Bil*_*win 31
BETWEEN包括两个参数之间的所有值,包括每端的值.换句话说,BETWEEN 1 AND 4包括值1,2,3和4.不仅仅是1和4,而不仅仅是2和3.
如果您只想要30天前的单日日期,请尝试以下方法:
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE DATE(datetime) = CURDATE() - INTERVAL 30 DAY
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)
使用CURDATE()而不是SYSDATE()因为CURDATE()返回没有时间组件的日期.
OMG*_*ies 12
您的查询设置为在今天(包括时间)和之前30天之间获取记录.
如果您想要超过30天(到时间)的记录,请使用:
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE datetime <= DATE_SUB(SYSDATE(), INTERVAL 30 DAY)
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)
如果你想要那些只有30天,而不是31或29,不考虑时间部分 - 使用:
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE DATE_FORMAT(datetime, '%m/%d/%Y') = DATE_FORMAT(DATE_SUB(SYSDATE(), INTERVAL 30 DAY), '%m/%d/%Y')
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31255 次 |
| 最近记录: |