T-SQL - 财政季度

时间:2016-12-15 07:57:06

标签: sql-server-2008 tsql

我希望得到像2011-Q4(Financial Yr-Qtr)

这样的输出

我可以这样做:

CASE -- Results: 2011-Q4 (Financial Yr-Qtr)
     WHEN MONTH(MyDate) BETWEEN 1 AND 3 THEN concat((YEAR(MyDate) - 1), '-', 'Q4')
     WHEN MONTH(MyDate) BETWEEN 4 AND 6 THEN concat((YEAR(MyDate) - 1), '-', 'Q1')
     WHEN MONTH(MyDate) BETWEEN 7 AND 9 THEN concat((YEAR(MyDate) - 0), '-', 'Q2')
     WHEN MONTH(MyDate) BETWEEN 10 AND 12 THEN concat((YEAR(MyDate) - 0), '-', 'Q3')
 END AS FYrQtr

但是如果不使用CONCAT可以实现相同的输出吗? (我只有2008年在工作; CONCAT在2012年到达)。

感谢。

1 个答案:

答案 0 :(得分:2)

特定情况下,您只需使用+运算符加上一些cast()

CASE -- Results: 2011-Q4 (Financial Yr-Qtr)
     WHEN MONTH(MyDate) BETWEEN 1 AND 3 THEN cast(YEAR(MyDate) - 1 as char(4)) + '-Q4'
     WHEN MONTH(MyDate) BETWEEN 4 AND 6 THEN cast(YEAR(MyDate) - 1 as char(4)) + '-Q1'
     WHEN MONTH(MyDate) BETWEEN 7 AND 9 THEN cast(YEAR(MyDate) - 0 as char(4)) + '-Q2'
     WHEN MONTH(MyDate) BETWEEN 10 AND 12 THEN cast(YEAR(MyDate) - 0 as char(4)) + '-Q3'
END FYrQtr

(但请注意cast()函数的使用:concat()执行从int到char类型的隐式转换,而+运算符则需要左边的部分和正确的部分是char类型)