2016-03-15 35 views
1

基本上我想检查是否有任何结束日期早于开始日期(这将是错误的)。因此我决定检查字符串的正确4个字符并与大于1进行比较。代码有效,但即使将日期更改为故意错误,也不会发生任何反应。格式是mm/dd/yyyy。如何显示具有enddate <startdate的MS Access中的行?

SELECT * 
FROM [myTable] 
WHERE 
RIGHT ('EndDate',4)<RIGHT ('StartDate',4) 
; 

给我的表在'短文本'中写了日期列。我可以改变它的日期,但是我不太确定如何使用DATEDIFF()

回答

2

RIGHT('EndDate',4)RIGHT ('StartDate',4)每个返回4个字符的字符串,日期。所以你的查询的WHERE条件相当于'Date' < 'Date',每行都是False。不要将字段名称放在引号内。

日期比较不像日期/时间值那样麻烦,而是日期作为字符串。使用CDate()将日期字符串转换为真实的日期/时间值。然后比较简单的......

SELECT m.* 
FROM myTable AS m 
WHERE CDate(m.EndDate) < CDate(m.StartDate); 

如果它的实际改变这些字段的数据类型为日期/时间,查询可能是简单,更快地执行。

+0

谢谢,这正是我想要的。请问“m。*”的含义与SELECT *具有相同的效果。 是否定义表格而不是每次输入整个'myTable'? –

+1

我用'm'作为表名的别名。所以'm。*'表示来自'm'数据源的所有字段,它实际上是'myTable'。由于这个查询只有一个数据源,因此'SELECT m。*'等同于'SELECT *'。但别名并没有真正增加这个查询的价值;我只是习惯性地将我的数据源别名化了。 – HansUp

2

对于字符串比较使用本:

SELECT * 
FROM [myTable] 
WHERE 
RIGHT ([EndDate],4)<RIGHT ([StartDate],4) 

但它不会对日期在一年之内,因为你只比较年工作。它适用于日期格式yyyy/mm/dd,在这种情况下不需要Right函数。

最佳的解决方案 - 使用CDate将文本转换为日期和使用用于比较同一运营商 - “<”

+0

Woops,与您同时发布。你是什​​么意思,它不会在不同的年份工作? –

+0

对不起,我的错。编辑答案。 –

相关问题