我有一个存储过程,它以各种格式接收日期并将它们转换为日期时间。以下行与预期一样有效:
RETURN CONVERT(datetime,@vMonth+'/'+@vDay+'/'+@vYear)
但是,我想指定日期应始终被视为美国格式,因为如果将T-SQL设置为使用英语,则会返回错误的结果。如果我这样做:
RETURN CONVERT(datetime,@vMonth+'/'+@vDay+'/'+@vYear, 101)
然后我开始收到以下错误(在我尝试的所有值上):
Conversion failed when converting date and/or time from character string.
我已经完成了搜索,并且没有提到此错误的线程似乎都是同一个问题。我很困惑为什么为已经被转换为us_english的字符串指定us_english(101)会导致过程中断。
编辑:我已将其归结为最小的案例,显示我不理解的地方。
这有效:
select CONVERT(datetime,'01/02/03')
这不是:
select CONVERT(datetime,'01/02/03',101)
答案 0 :(得分:0)
这对我来说很好。没有错误。
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
答案 1 :(得分:0)
事实证明,当使用101作为语言时,SQL Server希望世纪是XXXX格式。要正确处理2位数年份,您必须使用1作为语言。