2009-11-01 48 views
0

当我在sql server2005中运行这个时,出现错误。在比较英国格式日期时出现错误

select * from productratedates 
where RateDate BETWEEN '31/10/2009' AND '03/11/2009' 

错误:将char数据类型转换为日期时间数据类型导致超出范围的日期时间值。

但是,当我在SQl服务器2005中运行这个。它完全没问题。

select * from productratedates 
where RateDate BETWEEN '2009-10-31' AND '2009-11-03' 

我想比较英国格式的日期。

任何帮助!

回答

2

您的评论表示您希望以日/月/年格式输入日期。您可以使用SET DATEFORMAT选择格式:

SET DATEFORMAT dmy; 

例如:

set dateformat dmy 
select cast('31/10/2009' as datetime) -- succeeds 
set dateformat mdy 
select cast('31/10/2009' as datetime) -- fails 

您可以检索当前的日期格式与DBCC设置:

dbcc useroptions 

一个list of available languages,与他们的日期格式,是可从:

exec sp_helplanguage 

对于我来说,所谓的“英国”的语言有dateformat dmy。所以,你可以更改您的登录英国默认语言你甚至可以在connection string指定它(与登录的属性页。):

Server=<server>;Uid=<login>;Pwd=<password>;Current Language=British 
+0

我想要它日/月/年。 – Kashif

+0

谢谢。有效。 – Kashif

2

在将它发送到服务器之前,您可以将日期格式转换为YYYY-MM-DD格式。

+1

最好的解决方案 – gbn

0

日期来获得在美国读的格式在可能的情况,所以'31/10/2009'必须是英国格式,但'03/11/2009'翻到3月11日。通过及时倒退来扰乱你的敬畏。

我不知道这是否会为你工作,但我们总是使用格式为dd-MMM-YYYY:

select * from productratedates where RateDate BETWEEN '31-oct-2009' AND '03-nov-2009' 
0

如何日期的格式实际上是一个接口的事。如果您只是在查看数据日期,应始终采用一种特定格式YYYY/MM/DD

您的界面负责以本地化格式显示日期。通过使用这种做法,该脚本对于它的使用位置和语言的含义是不明确的。因此比较日期应始终以标准化格式完成。

我建议你做的是让你的界面以你喜欢的格式和后端(包括SQL语句)显示它作为标准日期格式。