Sql 根据Where子句转换日期
我有以下带有数据的虚拟表:Sql 根据Where子句转换日期,sql,Sql,我有以下带有数据的虚拟表: ACID srno date(mm/dd/yyyy) name 3 1 04/12/2010 mahesh 3 2 04/12/2010 mahendra 现在,如果我尝试使用以下SQL Transact: select srno from dummy where name = 'mahesh' and date= convert(datetim
ACID srno date(mm/dd/yyyy) name
3 1 04/12/2010 mahesh
3 2 04/12/2010 mahendra
现在,如果我尝试使用以下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。这意味着日期不是如上所述的execute convert语句
原因是什么?如果您使用
101
格式转换12/04/2010
,您将得到日期“2010年12月4日”,该日期不在您的数据库中。使用格式103
将格式为dd/mm/yyyy
的日期转换为DateTime
数据库使用DateTime类型存储日期,该类型的格式不可知。它确实有一个字符串转换的默认格式,在数据库中似乎是mm/dd/yyyy(101)
但是,在转换字符串以将其添加到表中时,需要在示例dd/mm/yyyy(103)中指定输入字符串的格式
查看详细信息,其中列出了可用于日期的所有格式样式。尝试使用样式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
老实说,如果要在SQL Server中指定日期文字,请使用最简单的YYYYMMDD格式,例如
and dummy.date = '20100412'
它是健壮的,适用于所有区域、用户语言和日期格式设置。这假设比较的另一端已经是日期列。即使必须强制转换,使用此格式也不需要指定格式
and dummy.date = cast('20100412' as datetime)
dummy.date
列是日期时间数据类型?@mahesh,103描述了输入值的格式。101没有正确描述输入。请记住103使用斜杠,例如25/12/2010,而104使用圆点,例如25.12。2010@JoeStefanelli,SQL数据库以mm/dd/yyyy的顺序存储日期,而我的日期是2010年4月12日--dd/mm/yyyy的顺序,这就是为什么上面的语句需要103而不是101。“原因是什么?”乔,你说得对,但我还是不明白为什么?如果sql server数据存储为mm/dd/yyyy格式,则mm/dd/yyyy代码的sql server数据存储是否为101 ok?dd/mm/yyyy格式为103@mahesh:SQL并不是真正在后台以mm/dd/yyyy格式存储日期。为转换选择的样式需要与输入值的格式(dd/MM/yyyy)匹配。是的,这是正确的,但如果印度等国家的某些日期模式类似于dd/MM/yyyy格式,并且根据您的建议,我必须首先转换为yyyyymmddwork@mahesh你可能没有抓住要点。SQL server日期不以任何“格式”存储。格式化的是要与列中存储的内容进行比较的输入(文字)。如果您是从用户或屏幕获取输入,那么您应该使用查询参数,这也不关心格式。谢谢,但必须很好地理解您的评论,例如SQL server日期不会以任何“格式”存储。。。如果为真,那么为什么有datetime数据类型可用?。若为真,则数据库表中的why以MM/DD/YYYY格式显示。我的意思是,如果我通过103代码格式插入DD/MM/YYYY格式的日期,它会自动存储为MM/DD/YYYY格式,为什么?