我的期间为201604(nvarchar)。有没有办法可以将201604
转换为APR16
?
答案 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))