日期:2014-05-18  浏览次数:20673 次

varchar转换datetime问题
SQL code

declare @a varchar(14)
declare @c varchar(6)
declare @b datetime

set @a ='20111101000000'
set @c = substring(@a,1,8)
print @c
set @b = convert(datetime,@c,120)
print @b


打印结果是
201111
11 11 2020 12:00AM

这是为什么?

------解决方案--------------------
1.你定義的@c 最大才6個字節,如果大於6個舊截取前6個. 所以是 201111
2.Datetime 默認打印的格式 是 MM DD YYYY hh:mimi AM(PM) , 因為你的@c 是 201111 SQL會解析成YYMMDD(20年11月11日),所以你打印出來的是 11 11 2020 12:00AM
------解决方案--------------------
SQL code

declare @a varchar(14)
declare @c varchar(8)  --楼主注意这里,截取的是8位,但定义了6位。
declare @b datetime

set @a ='20111101000000'
set @c = substring(@a,1,8)
print @c
set @b = convert(datetime,@c,112)
print @b

------解决方案--------------------
SQL code

declare @a varchar(14)
declare @c varchar(8)
declare @b datetime

set @a ='20111101000000'
set @c = substring(@a,1,8)
print @c
set @b = convert(VARCHAR(10),@c,120)
print CONVERT(VARCHAR(10),@b,120)

------解决方案--------------------
SQL code

declare @a varchar(14)
declare @c varchar(6) 
declare @b datetime 


set @a ='20111101000000' 




print CONVERT(VARCHAR(23),CONVERT(DATETIME,LEFT(@a,8)),121)

------解决方案--------------------
SQL code

declare @a varchar(14)


set @a ='20111101000000' 




print CONVERT(VARCHAR(23),CONVERT(DATETIME,LEFT(@a,8)),121)