我有跟随数据的虚拟表:
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不是如上所述的执行转换语句 是什么原因?
答案 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)