char型数据:2010-7-28 PM 1:19:35
期望转成:2010-07-28,
应该如何写语句,我会将2010-7-28 1:19:35转换为2010-07-28,但是字符串中一包含PM,就提示我“从 char 数据类型到 smalldatetime 数据类型的转换导致 smalldatetime 值越界。”应该如何写,谢谢

解决方案 »

  1.   

    convert(varchar(10),cast (left(10,字段) as datetime),120)
      

  2.   

    这是个好办法,不过应该是left(字段,10)呵呵,但是,如果日期是2010-7-1 PM 1:19:35怎么办,取十位貌似就该取到"P"了
      

  3.   

    DECLARE @C CHAR(20)
    SELECT @C='2010-7-28 PM 1:19:35'
    SELECT @C,LEFT(@C,CHARINDEX(' ',@C))
    --2010-7-28 PM 1:19:35 2010-7-28 
      

  4.   

    DECLARE @C CHAR(20)
    SELECT @C='2010-7-28 PM 1:19:35'
    SELECT @C,LEFT(@C,CHARINDEX(' ',@C))
    --补0
    ,CONVERT(VARCHAR(10),CAST(LEFT(@C,CHARINDEX(' ',@C)) AS DATETIME),120)
    --2010-7-28 PM 1:19:35 2010-7-28  2010-07-28
      

  5.   

    --> 测试数据:@tb
    declare @tb nvarchar(30)
    set @tb='2010-7-28 PM 1:19:35'
    select CONVERT(char(10),@tb,120)
      

  6.   

    select convert(varchar(10),cast(left('2010-7-8 PM 1:19:35',10) as datetime),120)
    这种值的情况下就会出错了
      

  7.   

    --> 测试数据:@tb
    declare @tb nvarchar(30)
    set @tb='2010-01-10 PM 1:19:35'
    select SUBSTRING(@tb,1,charindex('M',@tb)-2)
    用这个 PM AM都可以了