SQL Server:varchar到日期转换/转换错误

时间:2014-04-04 10:28:36

标签: sql-server tsql

如果我使用这个

SELECT CONVERT(DATE, '26/03/2014', 101)

我收到错误:

  

从字符串转换日期和/或时间时转换失败。

但如果我使用这个

SELECT CONVERT(DATE, '26/03/2014', 103)

没有错误,这是返回的结果:

2014-03-26

我不明白为什么第一个代码无法正常工作,因为我搜索并了解的是101适用于美国日期,103适用于英国/法国日期。< / p>

4 个答案:

答案 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

此处有更多格式http://www.w3schools.com/sql/func_convert.asp

答案 3 :(得分:0)

对文字使用语言中性日期表示。对于样式101,SQL Server假定MM / dd / yyyy而不是dd / MM / yyyy。

这里有一个很好的链接,来自MVP Tibor Karaszi的更多信息:

http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes