Ответ 1
Используйте функции DATENAME
и SUBSTRING
, например:
declare @str nvarchar(50) = '201604'
select UPPER(left(datename(mm,cast(@str+'01' as date)),3))+substring(@str,3,2) --APR16
У меня период 201604 (nvarchar). Есть ли способ преобразовать 201604
в APR16
?
Используйте функции DATENAME
и SUBSTRING
, например:
declare @str nvarchar(50) = '201604'
select UPPER(left(datename(mm,cast(@str+'01' as date)),3))+substring(@str,3,2) --APR16
Это немного уродливо, но вы не можете использовать какой-либо встроенный материал форматирования даты, как есть. Не стесняйтесь менять оператор 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 и получите имя файла месяца:
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 в последний раз, чтобы он изменился на допустимый формат даты. Затем используйте функцию 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)
Другим вариантом является использование 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))