如果我使用这个
SELECT CONVERT(DATE, '26/03/2014', 101)
我收到错误:
从字符串转换日期和/或时间时转换失败。
但如果我使用这个
SELECT CONVERT(DATE, '26/03/2014', 103)
没有错误,这是返回的结果:
2014-03-26
我不明白为什么第一个代码无法正常工作,因为我搜索并了解的是101
适用于美国日期,103
适用于英国/法国日期。< / p>
答案 0 :(得分:4)
此:
SELECT CONVERT(DATE, '26/03/2014', 101)
将以美国方式解释(mm/dd/yyyy
):2014年第26个月,第3天 - 这显然是失败的(没有第26个月)。
然而:
SELECT CONVERT(DATE, '26/03/2014', 103)
将被解释为欧洲方式(dd/mm/yyyy
):2014年第3个月的第26天(3月)。
你需要非常小心解析字符串到目前为止! Check out all the defined styles for CONVERT
here
如果您想确定它始终有效,请使用 ISO-8601 格式:YYYYMMDD
或在您的情况下:
SELECT CAST('20140326' AS DATE)
无论您使用何种语言/区域设置, 始终
答案 1 :(得分:3)
这就是你正在使用的format specifier(101)。
101 is mm/dd/yyyy
所以26不可能是一个月。因此导致错误。
103 is dd/mm/yy
因此它正常工作。如果这一天会少于13天,它会把它当作月份,并且会出现逻辑错误。
答案 2 :(得分:1)
转换签名如下
CONVERT(data_type(length),expression,style)
对于日期转换,样式如下
101 mm/dd/yy USA
103 dd/mm/yy British/French
答案 3 :(得分:0)
对文字使用语言中性日期表示。对于样式101,SQL Server假定MM / dd / yyyy而不是dd / MM / yyyy。
这里有一个很好的链接,来自MVP Tibor Karaszi的更多信息:
http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes