女士访问查询中的日期过滤(有趣)

时间:2018-08-02 03:17:34

标签: vb.net ms-access

它看起来像样本,但我找不到它是什么?

这就是我想要的最终结果=>

enter image description here

这是我的查询=>

 Select 
a.staffname,
a.staffno,
a.cntname 
From [Clisys] a 
where 
CDate([a.acdate]) <= #02/08/2018# and  
CntNo='H0128C' and 
[a.JobCode] like '1**/2018' and 
[a.acdate] is Not Null

但是问题是当我这样选择时,我什么也没得到。但是当我改变原因在哪里=>

 where 
    CDate([a.acdate]) <= #02/08/2019# and  
    CntNo='H0128C' and 
    [a.JobCode] like '1**/2018' and 
    [a.acdate] is Not Null

我得到了我想要的东西,但是为什么我选择2018年后不起作用?

2 个答案:

答案 0 :(得分:3)

始终将日期视为日期,而不是字符串,数字,例外。

编写SQL时,请使用正确的语法。日期值的文本表达式必须类似于mm / dd / yyyy或yyyy / mm / dd。

您确实使用了dd / mm / yyyy,因此您的日期为2018-02-08。因此使用:

CDate([a.acdate]) <= #2018/08/02#

,您的查询将按预期运行。

答案 1 :(得分:1)

我从这个答案中得到了一个主意Once again, year, month, day is better.,所以我将日期格式更改为2018/08/02,这是  工作!

  

默认的Access SQL日期格式(与区域设置无关)为   毫米/日/年。如果您使用无效的日期格式,它将“有帮助”地尝试   将其转换为对您有效的日期。

     

因此,如果您使用“ 30/09/2008”,它将识别出您正在使用   dd / mm / yyyy,并将其正确转换。但是,像   '10 / 01/2008'是有效的mm / dd / yyyy值,因此不会   被转换,并错误地存储,以防万一   dd / mm / yyyy ....

     

解决方案是始终将日期值转换为mm / dd / yyyy   在Access SQL语句中使用它们之前的字符串。你一定要   这里要格外小心,因为使用VBA日期格式蒙版可能无法完全使用   正如您在非美国语言环境中所期望的(例如,“有帮助”地解释   “ mm / dd / yyyy”作为“本地化的短日期格式”),因此请进行测试   仔细使用您的特定Access / VBA版本。