首页 文章

SQL Server:将varchar数转换为日期

提问于
浏览
-1

是否可以将varchar数转换为日期?我从表中获取数据,我希望它转换为日期 . 你能帮我搞清楚吗?最后一部分有错误:

将varchar数据类型转换为日期时间数据类型会导致超出范围的值 .

declare @year varchar(6)
declare @month varchar(2)
declare @test varchar (8)


set @year = right(left('F20160316-1000',5),4)
select @year

set @month = right(left('F20160316-1000',7),2)
select @month

set @test = @month +''+ @year
select @test

SELECT CONVERT (DATETIME, CONVERT(varchar(12),@test))

无论如何,我想要达到的结果是 MAR2016 .

2 回答

  • 2

    试试这样,

    DECLARE @year VARCHAR(6)
    DECLARE @month VARCHAR(2)
    DECLARE @test VARCHAR(8)
    
    SET @year = right(left('F20160316-1000', 5), 4)
    SET @month = right(left('F20160316-1000', 7), 2)
    SET @test = @year + @month + '01'
    
    SELECT UPPER(CONVERT(VARCHAR(3), DATENAME(MM, @test), 100)) + @year AS MonthYear
    
  • 1

    Jarlh指出,存储和转换的方式并不好 . 您可以使用datetimefrom部件来获取输出,在您的情况下缺少日期,我添加了它..

    declare @year varchar(6)
      declare @month varchar(2)
      declare @day varchar (8)
    
      set @year = right(left('F20160316-1000',5),4)
      set @month = right(left('F20160316-1000',7),2)    
      Set @day=right(left('F20160316-1000',5),2)
    
      select datetimefromparts(@year,@month,@day)
    

    如果您的字符串模式相同,您也可以这样做..

    declare @string varchar(15)
    set @string='F20160316-1000'
    select convert(datetime,substring(@string,2,charindex('-',@string,1)-2)
    

    Output: 2016-03-16 00:00:00.000

相关问题