SQLServer 2005:在查询中转换日期'yyyy-mm-dd'时出错

时间:2010-10-19 12:19:30

标签: sql-server-2005 datetime

我在查询中遇到这种情况:

WHERE fielddate> = '2010-10-01 'AND fielddate <= '2010-10-18'

使用相同的引擎数据库(sqlserver-2005 Express)将数据库迁移到另一台服务器(2008),返回错误:

  

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

但是,如果我使这个查询工作

WHERE fielddate> = '20101001 'AND fielddate <= '20101018'

整理类型是相同的:

  

Modern_Spanish_CI_AS

我看到的所有其他功能都是一样的。

我不知道问题是什么

感谢。

3 个答案:

答案 0 :(得分:1)

检查服务器的语言环境,但您也可以使用CONVERT并指定日期格式:)

http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

答案 1 :(得分:0)

解释这些不明确的日期格式的方式取决于登录的默认语言。据推测,您在一个实例中的登录语言与另一个实例中的语言不同。

最好避免使用这些含糊不清的格式。

答案 2 :(得分:-1)

问题源于您的数据存储在字符字段而不是日期时间字段中。特别是因为不同的排序规则会以不同的方式写入/读取字符字段。

进行更改

我的第一个建议是将字段的数据类型更改为DateTime。由于您要使用全新的SQL 2008数据库,因此您可能希望利用并将以字符格式存储的任何日期更改为实际的DateTime

CAST和CONVERT

您可以使用CAST显式转换字段,如

WHERE 1=1
AND CAST (fielddate AS DATETIME) >= '2010-10-01 'AND 
CAST (fielddate AS DATETIME) <= '2010-10-18'