代码之家  ›  专栏  ›  技术社区  ›  andres descalzo

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

  •  0
  • andres descalzo  · 技术社区  · 14 年前

    我在一个查询中有这个条件:

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

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

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

    但是如果我让这个查询有效的话

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

    排序规则类型相同:

    现代西班牙语

    我看到的其他特征都是一样的。

    我不知道是什么问题

    谢谢。

    3 回复  |  直到 14 年前
        1
  •  0
  •   Martin Smith    14 年前

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

    最好避免这些模棱两可的格式。

        2
  •  1
  •   ykatchou    14 年前

    检查服务器的区域设置,但也可以使用convert并指定日期格式:)

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

        3
  •  -1
  •   Raj More    14 年前

    这个问题源于这样一个事实:您的数据存储在字符字段而不是日期时间字段中。尤其是因为不同的排序规则将不同地写入/读取字符字段。

    做出改变

    我的第一个建议是将字段的数据类型更改为datetime。因为您要访问一个全新的SQL 2008数据库,所以您可能希望利用这个优势,将以字符格式存储的任何日期更改为实际的日期时间。

    铸造和转换

    你可以使用 CAST 如中所示显式转换字段

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