Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQLServer 2005:在查询中转换日期“yyyy-mm-dd”时出错_Sql Server 2005_Datetime - Fatal编程技术网

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

Sql server 2005 SQLServer 2005:在查询中转换日期“yyyy-mm-dd”时出错,sql-server-2005,datetime,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' 排序规则类型相同

我在查询中有以下条件:

WHERE fielddate> = '2010-10-01 'AND fielddate <= '2010-10-18'
要将数据库迁移到具有相同引擎数据库sqlserver-2005 Express的另一台服务器2008,返回错误:

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

但如果我让这个查询起作用

WHERE fielddate> = '20101001 'AND fielddate <= '20101018'
排序规则类型相同:

现代西班牙语

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

我不知道是什么问题


谢谢。

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


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


避免这些模棱两可的格式是最佳做法。

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

改变

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

铸造和转化

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

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

它是一个字符串文本,而不是存储在char列中的日期。它将隐式转换为datetime,不管怎样,当它用于对datetime列的谓词时,这就是他看到错误消息的原因。系统很棒,我无法更改它。它不是服务器的直接区域设置。它是登录的区域设置。