当我在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'
我想用英国格式比较日期。
任何帮助!!
答案 0 :(得分:2)
您可以在将日期发送到服务器之前将其转换为YYYY-MM-DD
格式。
答案 1 :(得分: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
对我来说,名为“British”的语言有dateformat dmy
。因此,您可以更改登录到英国的默认语言(从登录的属性页面。)您甚至可以在connection string中指定它:
Server=<server>;Uid=<login>;Pwd=<password>;Current Language=British
答案 2 :(得分:0)
日期尽可能以美国格式阅读,因此'31 / 10/2009'必须是英国格式,但'03 / 11/2009'翻转至3月11日。通过及时倒退来搞砸你的BETWEEN。
我不知道它是否适合你,但我们总是使用格式dd-mmm-yyyy:
select * from productratedates where RateDate BETWEEN '31-oct-2009' AND '03-nov-2009'
答案 3 :(得分:0)
如何格式化日期实际上是一个接口事物。如果您纯粹关注数据日期,则应始终采用一种特定格式YYYY/MM/DD
。
您的界面负责以本地化格式显示日期。通过使用这种做法,脚本对于它的使用位置和使用的语言是模棱两可的。因此,应始终以标准格式比较日期。
我建议你做的是让你的界面以你喜欢的格式显示它,并将后端(包括SQL语句)显示为标准化的日期格式。