将表列中的日期与MYSQL中的列表中生成的日期进行比较时,似乎存在一种奇怪的行为。使用生成的日期列表比较列日期列 - MYSQL
请看看* SQLFIDDLE参考。
工资表:在两个特定日期之间产生了恒天间隔
ID DATESTAMP
1 August, 30 2012 00:00:00+0000
2 September, 02 2012 00:00:00+0000
3 September, 15 2012 00:00:00+0000
4 September, 24 2012 00:00:00+0000
5 October, 05 2012 00:00:00+0000
6 October, 16 2012 00:00:00+0000
7 October, 19 2012 00:00:00+0000
8 November, 02 2012 00:00:00+0000
9 November, 10 2012 00:00:00+0000
10 November, 16 2012 00:00:00+0000
11 November, 24 2012 00:00:00+0000
12 November, 30 2012 00:00:00+0000
13 December, 01 2012 00:00:00+0000
14 December, 07 2012 00:00:00+0000
日期列表
查询:
set @i:= 0;
SELECT date_format(DATE(ADDDATE('2012-10-05',
INTERVAL @i:[email protected]+14 DAY)),'%Y-%m-%d')
AS dateP, @i
FROM payroll
HAVING @i < datediff(now(), date '2012-10-05')
;
DATEP @IntervalDays
2012-10-19 14
2012-11-02 28
2012-11-16 42
2012-11-30 56
2012-12-14 70
正如你可以看到生成的日期列表与上面的工资表格匹配。但是,当比较完成时,它会重新记录零个记录。
比较查询:
set @i:= 0;
SELECT distinct datestamp FROM payroll
WHERE date(datestamp) in (
SELECT DATE(ADDDATE('2012-10-05',
INTERVAL @i:[email protected]+14 DAY)) AS dateP
FROM payroll
where @i < DATEDIFF(now(), date '2012-10-05')
)
;
所以问题我有:
是内部查询停止为嵌套查询中使用时产生的日期?
我在这里使用的日期比较方法有什么问题吗?
这可能是整个故障的原因?
如何在
Select
本身没有任何程序/功能修复它? :)
PS:
我也试图在SQL服务器来测试这个问题,以及甲骨文。
有很多很好的问题和答案来支持在与网站的各种情况下发生的“日期比较”问题。这包括mysql date comparison with date_format等帖子。等等。可能会有一个隐藏的地方要求我正在用不同的措辞来处理确切的问题。无法找到并发布问题。
@bonCodigo如果您提供一些反馈,它可以帮助您和我。 – fancyPants
感谢您的回答,并花时间研究此问题。我已经尝试了几乎每种可能的相关日期函数,我可以使用它们来获取日期。包括你的,到目前为止没有任何工作。我会在发现我偶然注意到的情况下更新这个问题。例如。如果你在日期列表查询上面做了一个简单的'SELECT * FROM',它依然不会返回任何东西。很高兴听到你是否有其他魔法。 – bonCodigo
@bonCodigo更新了我的答案。 – fancyPants