SQL Server:将varchar数转换为日期

时间:2016-03-18 08:27:24

标签: sql sql-server sql-server-2008

是否可以将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 个答案:

答案 0 :(得分:2)

你存储和转换的方式并不像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)

<强>输出: 2016-03-16 00:00:00.000

答案 1 :(得分:1)

试试这个,

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