在 T-SQL 转换函数上指定样式会导致错误

Specifying style on T-SQL convert function causes error

我有一个存储过程,它接收各种格式的日期并将它们转换为日期时间。以下行按预期工作:

RETURN CONVERT(datetime,@vMonth+'/'+@vDay+'/'+@vYear)

但是,我想指定日期应始终被视为美国格式,因为如果 T-SQL 设置为使用英国格式,这将 return 产生错误的结果。如果我这样做:

RETURN CONVERT(datetime,@vMonth+'/'+@vDay+'/'+@vYear, 101)

然后我开始收到以下错误(针对我尝试过的所有值):

Conversion failed when converting date and/or time from character string.

我进行了搜索,none 提到此错误的线程似乎是同一个问题。我很困惑为什么为已经转换为 us_english 的字符串指定 us_english (101) 会导致过程中断。

编辑:我已将其归结为最小的情况,以显示我不理解的地方。

这个有效:

select CONVERT(datetime,'01/02/03')

这不是:

select CONVERT(datetime,'01/02/03',101)

这对我来说很好用。没有错误。

declare @mydate datetime = getdate()

declare @vMonth varchar(10), @vDay varchar(10), @vYear varchar(10)

set @vMonth = cast(DATEPART(mm, @mydate) as varchar(10))
set @vDay = cast(DATEPART(dd, @mydate) as varchar(10))
set @vYear = cast(DATEPART(YYYY, @mydate) as varchar(10))

select CONVERT(datetime, @vMonth+'/'+@vDay+'/'+@vYear, 101)

结果:

2015-01-09 00:00:00.000

事实证明,当使用 101 作为语言时,SQL 服务器希望世纪采用 XXXX 格式。要正确处理两位数的年份,您必须改用 1 作为语言。