如果您需要使用字符串指定日期时间,则应使用安全的、与语言无关的格式。
在 SQL Server 中,这是 ISO-8601 格式(稍作调整),它基本上支持两种安全格式DATETIME
,始终有效 - 无论您的语言、区域和日期格式设置如何:
YYYYMMDD (e.g. 20121231 for 31st of December 2012) if you need date only
YYYY-MM-DDTHH:mm:ss (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)
笔记:
更新:根据您的最后评论(关于两个用户的不同默认语言) - 试试这个:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
工作得很好...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
消息 242,级别 16,状态 3,第 7 行
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
这试图将字符串解释为2012 年第 30 个月的 11 日,显然,这失败了......