Sql server SQL Server错误地分析了日期

Sql server SQL Server错误地分析了日期,sql-server,ssms,Sql Server,Ssms,SQL Server 2005 SELECT TOP 10 * FROM abc WHERE aDate = '2014-01-20' 在SSMS中查询上述信息时,通常会返回aDate为2014年1月20日的结果。但是,对于同一服务器上的其他用户,它将返回日期转换错误,并且仅在运行以下查询时有效: SELECT TOP 10 * FROM abc WHERE aDate = '2014-20-01' 我检查了本地机器上的区域语言设置,它与我的完全相同。欢迎任何想法。在本例中,重要的不是机器上

SQL Server 2005

SELECT TOP 10 * FROM abc WHERE aDate = '2014-01-20'
在SSMS中查询上述信息时,通常会返回aDate为2014年1月20日的结果。但是,对于同一服务器上的其他用户,它将返回日期转换错误,并且仅在运行以下查询时有效:

SELECT TOP 10 * FROM abc WHERE aDate = '2014-20-01'

我检查了本地机器上的区域语言设置,它与我的完全相同。欢迎任何想法。

在本例中,重要的不是机器上的区域语言设置,而是数据库选项中定义的设置


无论如何,为了避免在解析查询中的日期时间时必须依赖区域语言设置,我建议您使用不变的ISO日期格式:
{d'yyyy-MM-dd'}
。注:还有一个用于指定小时数(
ts
).

当SQL server尝试将日期值20解析为月份时发生此错误,并导致错误,因为20不是有效的月份。使用日期格式“dd-MMM-yyyy”通常是一种很好的做法,它将适用于任何类型的SQL排序规则和区域语言设置。

它是特定于帐户的,设置存储为“British-English”,而不是“English”。将此更改为“英语”解决了问题。感谢您的回复。

用户如何访问服务器?直接在SSMS中?为什么不使用明确的格式,如
yyyyMMdd
(无分隔符)?检查每个数据库用户语言设置的可能重复项(在SSMS中,您可以使用对象浏览器查看服务器/安全/登录。)如何明确地查询在我标记为重复的问题中得到了很好的解释。除了不信者建议的未分离日期格式@Damien_外,ISO格式
yyyy-MM-ddTHH:MM:ss
还可以用于datetime/datetime2文本。嗯?如果使用
dd MMM yyyy
格式,则必须使用与区域语言设置匹配的(缩写)月份名称。这有什么帮助?是的。您必须使用缩写月份名称,如“2015年10月27日”。我认为这个缩写名称不会因地区设置而有所不同。@Sudharsanamuthukrishnan将您的会话语言设置为意大利语,然后尝试使用“2015年10月27日”。它会失败,因为意大利语中十月的缩写是“ott”(代表“ottobre”),而不是“Oct”
20151027
适用于每种语言设置。