Month(GetDate())
在1月份返回1,因此Ceiling()
函数会返回-1。由于-1的长度超过了char(1)所能容纳的范围,这导致了溢出错误。如果您将其改为char(2),就能更清晰地看到发生了什么,比如在今天的2024年1月3日,您的代码将返回2024Q-1
。
我建议改用DateAdd()
函数将日期回溯至上个季度,并使用DatePart()
函数直接获取季度编号,无需使用Ceiling()
或额外的类型转换。
USE RESOURCES
DECLARE @SelectQuarter AS VARCHAR(6);
SET @SelectQuarter = (CAST(YEAR(DATEADD(q, -1, GETDATE())) AS char(4)) + 'Q' + CAST(DATEPART(q, DATEADD(q, -1, GETDATE())) AS char(1)));
这种方法还能确保年份的准确性,否则字符串中的年份将是当前年份而非上个季度所在的年份。通过这种方式,无论当前日期如何,您都能够正确地获取上个季度的格式化字符串,如2024年1月3日时会得到2023Q4
。