【发布时间】:2018-06-20 14:36:24
【问题描述】:
可能有很多关于日期格式的问题,但我还没有找到类似的问题。
我有一张桌子,叫做 t_birthday。 t_birthday 有一个名为“DayOfMonth”的字段,该字段当前以 dd/mm/yyyy 格式存储数据。假设我拥有的记录的日期为 01/12/2016(2016 年 12 月 1 日)。
现在,如果我使用“创建”选项卡中的“查询设计”选项创建查询,我会选择我的表 t_birthday。对于字段选项,我选择 DayOfMonth。在条件选项中,我输入了=#01/12/2016#。当我单击运行时,它会查询数据库并成功返回具有该日期的记录。
但是.. 如果我检查从这个查询设计生成的 SQL,它是这样的:
SELECT t_birthday.DayOfMonth
FROM t_birthday
WHERE (((t_birthday.DayOfMonth)=#12/1/2016#));
如果我尝试将表中的 DayOfMonth 值复制并粘贴到该查询中,它将不起作用。注意查询中的格式是mm/dd/yyyy,但在我的表中它仍然是dd/mm/yyyy。我从来没有在我的表格中,甚至在我的电脑上碰过任何日期格式选项。当我实际使用表单创建此记录时,我有一个日期选择器,其格式也是 dd/mm/yyyy。
问题:
在查询设计中,当我在dd/mm/yyyy中指定条件时,为什么会生成mm/dd/yyyy形式的sql?
如果天数 (1-31) 为 13 或以上,或者月份值和日期值相同(10 月 17 日,1 月 1 日),我只能使用 dd/mm/yyyy 格式查询日期、3 月 3 日、11 月 11 日、12 月 12 日等)。 mm/dd/yyyy 仍然适用于前面提到的那些日期。不过,我无法使用 dd/mm/yyyy 查询 11 月 7 日、2 月 3 日、8 月 4 日等日期。我该如何解决这个问题?我存储日期,并直接使用表中的值作为查询中的条件。我不应该为了使用它们而更改我的日期值。
为什么我可以为 dd/mm/yyyy 格式或 mm/dd/yyyy 格式的天数大于 13 的日期编写 SQL 语句?例如,
WHERE子句可能看起来像:WHERE DayOfMonth=#13/06/2018或WHERE DayOfMonth=#06/13/2018并且它仍然返回相同的记录?为什么访问不强制执行特定格式?
编辑:
目前我在 VBA 中运行查询并使用以下命令将其返回到记录集中:
Dim bdayRecords As RecordSet
Dim sql As String
sql = "SELECT t_birthday.DayOfMonth"
sql = sql & " FROM t_birthday"
sql = sql & " WHERE (((t_birthday.DayOfMonth)=#" & rs("DayOfMonth") & "#));"
bdayRecords = CurrentDb.OpenRecordset(sql)
where 子句中的 rs 是以前的记录集,其日期值存储在“DayOfMonth”中。 rs 记录集以与填充 bdayRecords 完全相同的方式从不同的表中检索日期值。
bdayRecords 将找不到日期值与前面解释的条件匹配的记录。
【问题讨论】: