2017-05-01 116 views
0

的结果,当我运行此查询:请解释这个查询

SELECT InwardDate 
FROM tblDoc 
WHERE InwardDate > DATE() AND (InwardDate IS NOT NULL) 

我得到这样的结果

5/1/2017 

我在数据库中的行具有值:

5/1/2017 

因此,5/1/2017不是> 5/1/2017,结果应该是没有记录返回。

我后来去和尝试这样做,万一有一个时间差,我不能看到:

SELECT DATEDIFF("s", InwardDate, DATE()) AS DiffBetween, InwardDate 
FROM tblDoc 
WHERE InwardDate > DATE() AND (InwardDate IS NOT NULL) 

我得到:

enter image description here

需要注意的是,当我做:

SELECT DATE() FROM tblDoc 

我得到:

5/1/2017 

我看到第一个查询返回一个明显不合逻辑的结果,因为存储在数据库中的日期与SQL中的日期具有相同的确切值,但第一个查询说db列的值大于返回的日期由DATE()功能。我错过了什么?

回答

2

我现在在哪里,它是5/1/2017。

如果是的话,该日的价值,当然,要排除:

WHERE INWARDDATE > Date() 

的DATEDIFF,应该报告的值,如果2个日期是不一样 。

嗯,是的,但你没有记录返回,因此没有datediff。

您看到的值是InwardDate在新记录(*)上的默认值

+0

感谢您的帮助,但是,WHERE InwardDate> DATE()AND(InwardDate IS NOT NULL)会生成5/1/2017的单个结果行。 – NoChance

+2

左边也应该有'*'。尝试删除“InwardDate”列的默认值以使事情更清晰。 – Andre

+0

@Andre,你关于“*”前缀的观点以及它不代表真实行的事实非常好。事实上,如果我用“WHERE FALSE”替换整个WHERE表达式,我仍然会得到相同的结果。对于列的默认值,您额外的注意点也非常重要。非常感谢你。 – NoChance

0

date()会返回当前日期(4/30/17)。因此,如果它大于今天的日期并且不为空,它将返回进入日期。 5/1/17是> 4/30/17并且不为空,因此它返回它。

+0

谢谢你的帮助,我目前在这里,它是2017年5月1日。我对这个问题做了一个编辑,提到这个......时区确实很棘手。另外,如果两个日期不一样,那么应该报告一个值。 – NoChance

+0

SQL服务器是否位于你的时区?也可以尝试输出date()的结果来查看它是什么。 –

+0

好的一点,我试图MS-Access与MS-Access后端,而不是与SQL服务器后端。数据库在我的机器上。 – NoChance