将YYYYMM转换为MMMYY

时间:2016-06-22 10:01:04

标签: sql sql-server tsql

我的期间为201604(nvarchar)。有没有办法可以将201604转换为APR16

9 个答案:

答案 0 :(得分:45)

使用DATENAME& SUBSTRING函数,如下所示:

declare @str nvarchar(50) = '201604'

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

答案 1 :(得分:17)

它有点难看,但你不能使用任何内置的日期格式化内容。如果您有月份名表等,请随意更换联接的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)

答案 2 :(得分:9)

试试这个:

添加'01'(作为月的第一天),因此将varchar转换为datetime并获取月份的日期名称:

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)

答案 3 :(得分:7)

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

DECLARE @STRING VARCHAR(10)='201604'

SELECT DATENAME(MONTH,@STRING+'01') +' '+SUBSTRING(@STRING,3,2)

输出:

April 16

答案 4 :(得分:6)

分两行:

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

答案 5 :(得分:6)

另一种选择是使用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

答案 6 :(得分:5)

使用简单的

declare @test nvarchar(max) = '201604'

select left(DATENAME(month, @test +'01'),3) + SubString(@napis,3,2)

答案 7 :(得分:4)

另一种方式:

DECLARE @Date varchar(6) = '201604'

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

答案 8 :(得分:4)

试试这个..

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