将YYYYMM转换为MMMYY

我有一段时间201604(nvarchar)。 有没有办法将201604转换成APR16

使用DATENAMESUBSTRING函数,如下所示:

 declare @str nvarchar(50) = '201604' select UPPER(left(datename(mm,cast(@str+'01' as date)),3))+substring(@str,3,2) --APR16 

这有点难看,但你不能使用任何内置date格式的东西。 如果你有一个月份名表等,可以随意换出一个连接的case语句:

 DECLARE @exampleVal NVARCHAR(6) = '201604'; SELECT CASE SUBSTRING(@exampleVal, 5, 2) WHEN '01' THEN 'JAN' WHEN '02' THEN 'FEB' WHEN '03' THEN 'MAR' WHEN '04' THEN 'APR' WHEN '05' THEN 'MAY' WHEN '06' THEN 'JUN' WHEN '07' THEN 'JUL' WHEN '08' THEN 'AUG' WHEN '09' THEN 'SEP' WHEN '10' THEN 'OCT' WHEN '11' THEN 'NOV' WHEN '12' THEN 'DEC' END + SUBSTRING(@exampleVal, 3, 2) 

尝试这个:

添加“01”(作为一个月的第一天),所以将您的varchar转换为datetime并获取月份的date名称:

 declare @myperiod nvarchar(10) SET @myperiod = '201604' SET @myperiod = @myperiod + '01' SELECT UPPER(SUBSTRING(DATENAME(month, CONVERT(datetime, @myperiod)), 1, 3)) + SUBSTRING(CONVERT(varchar, DATEPART(year, CONVERT(datetime, @myperiod))), 3, 4) 

在最后添加01,以便它更改为有效的date格式。 然后使用datename函数:

 DECLARE @STRING VARCHAR(10)='201604' SELECT DATENAME(MONTH,@STRING+'01') +' '+SUBSTRING(@STRING,3,2) 

输出:

 April 16 

在两行中:

 declare @napis varchar(6)='201506' SELECT UPPER(LEFT(DATENAME(month, @napis+'01'),3)) + SubString(@napis,3,2) 

另一种select是使用Format()DateFromParts() 。 这将在SQL Server 2012或更新的版本中工作:

 Declare @Period NVarchar (6) = N'201604' Declare @Format NVarchar (5) = N'MMMyy' Select Upper(Format(DateFromParts(Left(@Period, 4), Right(@Period, 2), 1), @Format)) 

APR16

使用简单的这个

 declare @test nvarchar(max) = '201604' select left(DATENAME(month, @test +'01'),3) + SubString(@napis,3,2) 

其他方式:

 DECLARE @Date varchar(6) = '201604' SELECT REPLACE(SUBSTRING(CONVERT(char(9), CAST(@Date +'01' as Date), 6), 4, 7), ' ', '') 

试试这个..

 DECLARE @DATE NVARCHAR(6) = '201604' SELECT datename(MONTH,CONVERT(DATE,CONVERT(DATE,LEFT(@DATE,4)+'.'+RIGHT(@DATE,2)+'.01',102),102))