将日期转换为Where子句

时间:2011-03-03 17:26:26

标签: sql

我有跟随数据的虚拟表:

ACID        srno    date(mm/dd/yyyy)    name
3            1     04/12/2010          mahesh
3            2     04/12/2010          mahendra

现在,如果我尝试使用Follow SQL Transact:

select srno from dummy
where name = 'mahesh'
and date= convert(datetime,'12/04/2010',101) –- I have date in dd/MM/yyyy Format
and ACID=3

它没有返回表的srno。这意味着Date不是如上所述的执行转换语句 是什么原因?

3 个答案:

答案 0 :(得分:2)

如果您使用格式12/04/2010转换101,则会获得日期“2010年12月4日”,这不在您的数据库中。使用格式103将日期格式dd/mm/yyyy转换为DateTime

数据库使用与格式无关的DateTime类型存储日期。它确实有字符串转换的默认格式,在数据库上似乎是mm / dd / yyyy(101)。

但是,当您转换字符串以将其添加到表中时,您需要指定输入字符串的格式,在您的示例中为dd / mm / yyyy(103)。

查看MSDN article for CAST and CONVERT,其中详细说明了可以与日期一起使用的所有格式样式。

答案 1 :(得分:2)

尝试使用样式103而不是101。

select srno from dummy
where name = 'mahesh'
and date= convert(datetime,'12/04/2010',103) –- I have date in dd/MM/yyyy Format
and ACID=3

答案 2 :(得分:1)

老实说,如果你想在SQL Server中指定DATE LITERAL,请坚持使用最简单的YYYYMMDD格式,例如

and dummy.date = '20100412'

强大,适用于所有区域,用户语言 dateformat 设置。这假设比较的另一侧已经是日期列。即使您必须使用此格式进行CAST,也不需要指定格式

and dummy.date = cast('20100412' as datetime)
相关问题