The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
当我在桌面计算机上运行SQL查询时,它很好。没有错误或任何东西。但是,当我在将要运行它的服务器上执行相同的代码时,它会失败。
我已经确定这是导致问题的SQL部分。 DateOfRun是一个DateTime字段。
,(SELECT intField
FROM tableA
WHERE RowIdentifier= ParentTable.RowIdentifier
AND DateOfRun = Convert(Varchar(10),ParentTable.OfferOutcomeDateTime,120)) AS Days
为什么这会在一台机器上运行,而不是在另一台机器上运行?
答案 0 :(得分:2)
我的猜测是,由于本地和服务器环境中的不同文化,因此字符串的DateTime转换失败。
答案 1 :(得分:2)
这绝对是奇怪的,可能与区域设置有关,但它就像旧的笑话
一个男人去医生办公室。他 说,“医生,我养的时候会疼 我的手臂在我的头上。“医生 回答:“那就不要举起你的胳膊 在你的头上。“
所以不要这样做。这样做
WHERE RowIdentifier= ParentTable.RowIdentifier
AND DateOfRun =
DATEADD(DAY, DATEDIFF(DAY, 0, ParentTable.OfferOutcomeDateTime), 0)
这是查看托马斯回答Most efficient way in SQL Server to get date from date+time?
的最佳方式然后,无论区域设置如何,它都将起作用,因为它永远不会被表示为字符串
答案 2 :(得分:0)
您没有提到SQL的风格,但最可能的候选是char字段的输入格式与系统的语言环境设置之间的差异。
“2011年3月30日”是美国3月30日,但在英国毫无意义。 “30/3/2011”是英国3月30日,但在美国毫无意义。
答案 3 :(得分:0)
如果不同机器上的数据不同,这将适用于一台机器,而不适用于另一台机器。
如果您的区域设置不同,它也不会起作用。
你应该做点什么
SET DATEFORMAT dmy
设置您要使用的格式。
您还可以在将日期转换为varchar之前将日期转换/转换为本地设置 - http://msdn.microsoft.com/en-us/library/ms187928.aspx