Подтвердить что ты не робот

Конвертировать YYYYMM в MMMYY

У меня период 201604 (nvarchar). Есть ли способ преобразовать 201604 в APR16?

4b9b3361

Ответ 1

Используйте функции DATENAME и SUBSTRING, например:

declare @str nvarchar(50) = '201604'

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

Ответ 2

Это немного уродливо, но вы не можете использовать какой-либо встроенный материал форматирования даты, как есть. Не стесняйтесь менять оператор 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)

Ответ 3

Попробуйте следующее:

Добавьте '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)

Ответ 4

Добавьте 01 в последний раз, чтобы он изменился на допустимый формат даты. Затем используйте функцию datename:

DECLARE @STRING VARCHAR(10)='201604'

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

Вывод:

April 16

Ответ 5

В двух строках:

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

Ответ 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

Ответ 7

Используйте простой

declare @test nvarchar(max) = '201604'

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

Ответ 8

Другой способ:

DECLARE @Date varchar(6) = '201604'

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

Ответ 9

Попробуйте это.

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