我有“警报”表与日期字段-targetdate。
我想选择过去45天的所有数据。
我尝试了下面的代码,但它没有返回任何结果。。。
SELECT userID, refID, `targetDate`
FROM alerts
WHERE type = 'travelSoon'
AND DATEDIFF( CURDATE( ) , targetDate ) > 45
table
id userID type refID createDate targetDate lastSendDate sent valid
1 26 travelSoon NO 2018-05-02 13:54:25 0000-00-00 2018-05-02 00:00:00 0 1
2 26 travelSoon NO 2018-05-02 13:55:50 2018-06-01 0000-00-00 00:00:00 0 1
3 26 travelSoon DK 2018-05-02 13:56:12 2018-12-01 0000-00-00 00:00:00 0 1
4 26 travelSoon 2018-05-02 13:59:50 0000-00-00 0000-00-00 00:00:00 0 1
5 26 travelSoon 2018-05-02 14:00:09 2018-08-01 0000-00-00 00:00:00 0 1
6 26 travelSoon DK 2018-05-02 14:00:48 2018-08-01 0000-00-00 00:00:00 0 1
7 26 travelSoon 2018-05-02 16:45:18 2018-05-01 0000-00-00 00:00:00 0 1
8 26 travelSoon RO 2018-05-02 16:45:45 2018-04-01 0000-00-00 00:00:00 0 1
5条答案
按热度按时间c9qzyr3d1#
2ul0zpep2#
ansi标准语法为:
在mysql中(您的语法建议:
pbgvytdp3#
试试这个。。。
在线演示:http://www.sqlfiddle.com/#!9/4ecdc0/4/0
如果你只使用
Datediff(Curdate(), targetDate) < 45
条件下,它可能返回过去和将来的日期。请参考下表。为了避免这种情况,你可以使用另一种情况,像这样。。。
irlmq6kh4#
使用
DATEDIFF()
是个坏主意。它阻止了使用索引的能力,还有一种替代方法不。。。http://www.sqlfiddle.com/#!9月4日
a9wyjsp75#
在mssql中
DATEDIFF(interval, date1, date2)
返回间隔date2 - date1
.应从以下列表中选择间隔:
然后使用:
对于mysql,您可以使用
TIMESTAMPDIFF(unit,date1,date2)
返回date1 - date2
.unit
可从中选择MICROSECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.
```SELECT userID, refID,
targetDate
FROM alerts
WHERE type = 'travelSoon'
AND TIMESTAMPDIFF(DAY, CURDATE( ), targetDate) > 45