declare @a varchar(14)
declare @c varchar(6)
declare @b datetimeset @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.   

    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
      

  2.   

    我就是想把一个varchar(14)的字符串转换成年月的日期格式,那应该怎么写呢?
      

  3.   


    declare @a varchar(14)
    declare @c varchar(8)  --楼主注意这里,截取的是8位,但定义了6位。
    declare @b datetimeset @a ='20111101000000'
    set @c = substring(@a,1,8)
    print @c
    set @b = convert(datetime,@c,112)
    print @b
      

  4.   


    declare @a varchar(14)
    declare @c varchar(8)
    declare @b datetimeset @a ='20111101000000'
    set @c = substring(@a,1,8)
    print @c
    set @b = convert(VARCHAR(10),@c,120)
    print CONVERT(VARCHAR(10),@b,120)这跟你的DATETIME显示格式有关系,实际上你的set @b = convert(VARCHAR(10),@c,120)根本没起作用。出来还是DATETIME类型的,你转化为VARCHAR类型就可以了
      

  5.   

    可是我想转换成datetime类型啊
      

  6.   


    declare @a varchar(14)
    declare @c varchar(6) 
    declare @b datetime 
    set @a ='20111101000000' 
    print CONVERT(VARCHAR(23),CONVERT(DATETIME,LEFT(@a,8)),121)
      

  7.   


    declare @a varchar(14)
    set @a ='20111101000000' 
    print CONVERT(VARCHAR(23),CONVERT(DATETIME,LEFT(@a,8)),121)
      

  8.   

    declare @a varchar(14)
    declare @c varchar(8)
    declare @b datetimeset @a ='20111101000000'
    set @c = substring(@a,1,8)
    set @b = convert(datetime,@c,120)
    select @b/*******************-----------------------
    2011-11-01 00:00:00.000(1 行受影响)难道不是datetime么
      

  9.   


    declare @a varchar(14)
    set @a ='20111101000000' 
    print CONVERT(VARCHAR(23),CONVERT(DATETIME,LEFT(@a,6)+'01'),121)