在 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 作为语言。
我有一个存储过程,它接收各种格式的日期并将它们转换为日期时间。以下行按预期工作:
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 作为语言。