2009-11-03 79 views
1

我很难从特定日期的数据库中获取记录。这是我现在的SQL命令:MS Access SELECT和WHERE

SELECT * FROM ict1 WHERE date='26/03/1992' 

它应该从我的数据库返回一条记录。 “日期”是一列,其中一条记录的值为'26/03/1992'。我测试了数据库连接,我可以使用:

SELECT * from ict1 

所以我知道不是这样。这可能只是SQL语法有很大的不同,我习惯于MySQL:@)

应该提到我使用的.NET与OleDbConnection。

谢谢。

+0

什么是日期列的类型?那是什么是表*中的日期列的类型在访问*中? – Murph 2009-11-03 10:32:09

+0

我对这两个回复发表了评论。 – Fionnuala 2009-11-03 11:34:40

回答

0

使用日期为YYYY/MM/DD格式:

SELECT * FROM ict1 WHERE date='1992/03/26'

SELECT * FROM ict1 WHERE date=#1992/03/26#

+1

在Access中,日期分隔符是散列,而不是引号。 – Fionnuala 2009-11-03 11:32:23

+0

正式注意。谢谢。 – 2009-11-03 13:58:52

4

通常日期需要格式化为像下面

Select * from ict1 where date= #03/26/1992# 

访问#表示访问日期。 格式化为'10/03/1992'的日期要格外小心,因为它可能意味着3月10日或10月3日,具体取决于你的位置。

另外#1992至1903年/ 26#也适用

+0

使用yyyy/mm/dd更安全,因为它对访问和用户都是明确的,无论您的语言环境在哪里。 – Fionnuala 2009-11-03 11:33:59

+0

@Remou - 我是aggree。我被之前的日期格式所吸引。 – 2009-11-03 21:14:27

+0

在某些情况下(虽然不是这个),ISO格式在Access中打破了,所以通常的建议是使用像“d-mmm-yyyy”这样的格式,其中月份是用字母拼出而不是数字。坦率地说,我认为在第一个地方使用Format()是错误的,而只是用DateSerial()传递日期,这绝对不会出错。当然,在这种情况下,OLEDB无法工作。 – 2009-11-04 01:53:27

0

您可能需要使用日期比较功能,而非日期=#XXXX/XX/XX#。由于格式和数据类型问题,日期比较不会产生预期的结果。在SQL Server中,日期可以作为日期时间或日期数据类型存储。你需要确保你比较相同类型和格式的东西。

DateDiff(“d”,#1992/03/26#,date)= 0