奇怪的 SQL 错误:将 varchar 转换为日期时间会导致值超出范围

本文关键字:时间 范围 日期 SQL 错误 转换 varchar | 更新日期: 2023-09-27 18:32:16

在新的服务器中安装应用程序后,它会抛出以下错误:

The conversion of a varchar data type to a datetime data type resulted in an 
out-of-range value.

该应用程序在其他服务器上正常工作,所以我对这个问题感到困惑。保存的值为

25/4/2012 1:18:01 PM 
这是一个已经保存到日期时间

列中的日期时间类型,所以我确定数据库和代码本身没有问题。问题可能完全是因为服务器的设置吗? 任何具体原因和解决方案/解决方法?

奇怪的 SQL 错误:将 varchar 转换为日期时间会导致值超出范围

一种防止此问题的方法。

如果您对包含日期的 Feed 的内容有任何影响,则"Day# MonthName 4digityear"是您想要的格式。 无论区域设置如何,sql server 中的启发式方法都不会对"25APR2012"感到困惑。 这是一种更强大的格式。 它将毫无困难地穿越海洋。

否则,您必须使用 convert(datetime, TheDateString, CorrectFormatNumber)

我认为 131 可能适合您。

哦,为了回应一些评论,如果你可以防止这些数据采用字符串的形式,你应该这样做。

您可以为每个连接设置日期时间格式,例如

设置日期格式 DMY

此方法允许您对发送到 SQL Server 的日期使用 d/m/y 的日期格式,但它取决于连接。如果与 SQL Server 建立了新连接,或者服务器已停止并重新启动,则日期格式将返回到 m/d/y。

永久设置格式

若要在服务器上设置语言,必须使用 sp_addlanguage 添加语言。下面的示例设置英式英语的语言,并以 DD/MM/YY 格式给出日期。该示例也可以应用于其他国家/地区,但您可能需要修改sp_addlanguage的参数。

执行sp_addlanguage"英国","英语", '一月,二月,三月,四月,五月,六月,七月,八月,九月,十月, 11月,12月', "1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月", "星期一,星期二,星期三,星期四,星期五,星期六,星期日", DMY,1 sp_configure"默认语言",1 使用覆盖重新配置

欲了解更多信息

http://support.microsoft.com/kb/173907

很好的建议,但就我而言,我懒得浏览数千行代码。重新安装 sql 并在安装过程中设置区域设置是最快、最不耗时的方法。

在将日期时间字符串

保存到数据库中之前,在应用程序上解析日期时间字符串是给定的。

设置语言和日期格式仅适用于当前查询,不适用于所做的每个查询。当然,更新代码上的sql查询是浪费时间,imo和我的情况。