奇怪的 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
这是一个已经保存到日期时间列中的日期时间类型,所以我确定数据库和代码本身没有问题。问题可能完全是因为服务器的设置吗? 任何具体原因和解决方案/解决方法?
一种防止此问题的方法。
如果您对包含日期的 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和我的情况。