SQL 服务器错误地解析日期
SQL Server Incorrectly Parsing Date
SQL 服务器 2005
SELECT TOP 10 * FROM abc WHERE aDate = '2014-01-20'
在 SSMS 中查询上述内容时,通常会 return 结果是 aDate 是 2014 年 1 月 20 日。但是对于同一服务器上的另一个用户,它 return 是一个日期转换错误,只有在运行 以下查询:
SELECT TOP 10 * FROM abc WHERE aDate = '2014-20-01'
我检查了本地机器上的区域语言设置,它和我的完全一样。欢迎任何想法。
在这种情况下,重要的不是计算机上的区域语言设置,而是数据库选项中定义的设置。
无论如何,为了避免在查询中解析日期时间时必须依赖区域语言设置,我鼓励您使用不变的 ISO 日期格式:{d 'yyyy-MM-dd'}
。请注意,还有一个用于指定小时数 (ts
)。
发生此错误的原因是 SQL 服务器尝试将日期值 20 解析为月份,并导致错误,因为 20 不是有效的月份。始终使用日期格式 'dd-MMM-yyyy' 适用于任何类型的 SQL COLLATION 和区域语言设置。
它是特定于帐户的,设置存储为 'British - English' 而不是 'English'。将其更改为 'English' 解决了问题。感谢您的回复。
SQL 服务器 2005
SELECT TOP 10 * FROM abc WHERE aDate = '2014-01-20'
在 SSMS 中查询上述内容时,通常会 return 结果是 aDate 是 2014 年 1 月 20 日。但是对于同一服务器上的另一个用户,它 return 是一个日期转换错误,只有在运行 以下查询:
SELECT TOP 10 * FROM abc WHERE aDate = '2014-20-01'
我检查了本地机器上的区域语言设置,它和我的完全一样。欢迎任何想法。
在这种情况下,重要的不是计算机上的区域语言设置,而是数据库选项中定义的设置。
无论如何,为了避免在查询中解析日期时间时必须依赖区域语言设置,我鼓励您使用不变的 ISO 日期格式:{d 'yyyy-MM-dd'}
。请注意,还有一个用于指定小时数 (ts
)。
发生此错误的原因是 SQL 服务器尝试将日期值 20 解析为月份,并导致错误,因为 20 不是有效的月份。始终使用日期格式 'dd-MMM-yyyy' 适用于任何类型的 SQL COLLATION 和区域语言设置。
它是特定于帐户的,设置存储为 'British - English' 而不是 'English'。将其更改为 'English' 解决了问题。感谢您的回复。