选择带日期条件的查询

hel*_*pls 11 sql ms-access date

我想在之后d/mm/yyyy,之后d/mm/yyyy或之前的某些日期检索记录,d/mm/yyyy我该怎么办呢?

SELECT date
FROM table
WHERE date > 1/09/2008;
Run Code Online (Sandbox Code Playgroud)

SELECT date
FROM table
WHERE date > 1/09/2008;
AND date < 1/09/2010
Run Code Online (Sandbox Code Playgroud)

它不起作用.

smi*_*man 26

小心,你不知不觉地问"日期大于1除以9,除以2和8".

#像这样在日期附近放置标志#1/09/2008#

  • -1。这种方法依赖于默认日期格式 dd/mm/yyyy。另一个答案使用 ISO 日期格式。OP确实问“我该怎么做”而不仅仅是“为什么我的sql返回错误的答案” (2认同)

one*_*hen 12

分号字符用于终止SQL语句.

您可以使用#日期值周围的符号,也可以使用Access(ACE,Jet,无论)强制转换DATETIME功能CDATE().顾名思义,它DATETIME总是包含一个时间元素,因此您的文字值应该反映这一事实.SQL引擎完全理解ISO日期格式.

最好不要使用BETWEEN用于DATETIME在Access:它是仿照使用浮点类型,总之时间是连续的;)

DATE并且TABLE是SQL标准,ODBC和Jet 4.0中的保留字(可能超出),因此最好避免使用数据元素名称:

您的谓词建议公开表示期间(其中包括期间的开始日期或结束日期),这可以说是最不受欢迎的选择.这让我想知道你是否打算使用封闭式开放式代表(既不包括其开始日期,也包括期末在结束日期之前结束):

SELECT my_date
  FROM MyTable
 WHERE my_date >= #2008-09-01 00:00:00#
       AND my_date < #2010-09-01 00:00:00#;
Run Code Online (Sandbox Code Playgroud)

或者:

SELECT my_date
  FROM MyTable
 WHERE my_date >= CDate('2008-09-01 00:00:00')
       AND my_date < CDate('2010-09-01 00:00:00'); 
Run Code Online (Sandbox Code Playgroud)