我想将日期从格式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'
答案 0 :(得分:2)
如果将@currdate
合并为日期,则可以使用CONVERT
将01
转换为日期,然后使用格式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)
答案 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)