将yyyymm日期转换为yyyyqn SQL

时间:2020-05-17 08:03:29

标签: sql sql-server

我想将日期从格式yyyymm转换为yyyyqn格式,例如202001(2020年1月),202002年2月(2020年2月)等。

@currdate (yyyymm) Expected format
-----------------------------------
202001              2020Q1
202005              2020Q2 
202012              2020Q4   and so on

这是我尝试过的查询:

declare @currdate nvarchar(6)
set @currdate = (SELECT FORMAT(GETDATE(), 'yyyyMM'))

select 
    left(@currdate, 4) as year, 
    cast(year as char(4)) + 'Q' + (select right(@currdate, 2) as month)

错误:

无效的列名'year'

3 个答案:

答案 0 :(得分:2)

如果将@currdate合并为日期,则可以使用CONVERT01转换为日期,然后使用格式112(ISO)。然后,您可以使用DATEPART提取四分之一,然后将其放在带有左侧4个字符和一个CONCAT的{​​{1}}中:

Q

或者,您也可以将月份除以3,取declare @currdate nvarchar(6) set @currdate = '202001' select concat(left(@currdate, 4), 'Q', datepart(quarter, convert(date, concat(@currdate, '01'), 112))) set @currdate = '202008' select concat(left(@currdate, 4), 'Q', datepart(quarter, convert(date, concat(@currdate, '01'), 112))) 并加1:

FLOOR

在两种情况下,输出均为:

select concat(left(@currdate, 4), 'Q', floor(right(@currdate, 2) / 3) + 1)

Demo on dbfiddle

答案 1 :(得分:2)

不能在选择中使用列别名,必须重复代码

declare @currdate nvarchar(6)
set @currdate =(SELECT FORMAT(GetDate(),'yyyyMM'))
select left(@currdate,4) as year, cast(left(@currdate,4) as char(4)) 
 + 'Q' + (select right(@currdate,2) as month)

答案 2 :(得分:2)

我会这样做(将2添加到1-12之间的任何值,然后将整数除以3将会在1-4范围内提供您想要的结果)

declare @d char(6) = '202001'

SELECT CONCAT(LEFT(@d,4),'Q',(RIGHT(@d,2)+2)/3)