将YYYYMM转换为MMMYY

Red*_*ket 35 sql t-sql sql-server

我有一个期间201604(nvarchar).有没有办法可以兑换201604APR16

Pரத*_*ீப் 44

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

declare @str nvarchar(50) = '201604'

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


Bri*_*dge 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)
Run Code Online (Sandbox Code Playgroud)

  • @Thomas好吧,也许这种方式实际上更好.我的意思是,哪个人想看"APR16"而不是"2016年4月"?因此,最有可能的是,实际取得此功能结果的事情并不关心区域/语言设置. (4认同)
  • @Thomas我知道 - 但问题中指明了哪里? (3认同)
  • @DamianYerrick你不希望法国订购网站将其转换为"AOU16",因为它是*代码*.这是我的观点. (3认同)
  • @RedRocket这不是一件坏事. (3认同)
  • 顺便说一句,在法语中,六月和七月的月份以相同的三个字母(JUI)开头.所以,当然,任何依赖于语言环境配置的解决方案实际上只是在这种特殊情况下搞砸了. (2认同)

Joe*_*ras 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)
Run Code Online (Sandbox Code Playgroud)


The*_*war 7

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

DECLARE @STRING VARCHAR(10)='201604'

SELECT DATENAME(MONTH,@STRING+'01') +' '+SUBSTRING(@STRING,3,2)
Run Code Online (Sandbox Code Playgroud)

输出:

April 16
Run Code Online (Sandbox Code Playgroud)


Whe*_*ver 6

分为两行:

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


Siy*_*ual 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))
Run Code Online (Sandbox Code Playgroud)

APR16


Naz*_*lah 5

用这个简单吧

declare @test nvarchar(max) = '201604'

select left(DATENAME(month, @test +'01'),3) + SubString(@napis,3,2)
Run Code Online (Sandbox Code Playgroud)