SQL Server 2008 R2中是否有更简便的两位年份获取方法?
问题说明
- 强制运行环境:SQL Server 2008 R2
- 业务需求:在原有发票编号追加月、日后缀的基础上,新增两位年份值拼接在末尾
- 当前实现逻辑:通过
REPLACE + SUBSTRING + STR + YEAR函数组合提取两位年份,核心提取代码为:
REPLACE((SUBSTRING(STR (Year(@Date),4),3,2)), ' ', '0')
- 现有完整测试代码:
DECLARE @TestVariable AS VARCHAR(100), @Date as datetime = GetDate() SET @TestVariable = '1234' + REPLACE(STR(MONTH(@Date), 2), ' ', '0') + REPLACE(STR(DAY(@Date), 2), ' ', '0') + REPLACE((SUBSTRING(STR (Year(@Date),4),3,2)), ' ', '0') PRINT @TestVariable
咨询问题:是否存在更简洁易读的两位年份获取方案,适配当前拼接发票编号的场景?
推荐实现方案
在SQL Server 2008 R2环境下,不需要多层嵌套字符串函数处理,直接用CONVERT函数指定ISO日期格式码即可,甚至可以一次性完成年、月、日两位格式的拼接,完全替代原来三段独立的REPLACE逻辑:
DECLARE @TestVariable AS VARCHAR(100), @Date AS DATETIME = GETDATE() SET @TestVariable = '1234' + CONVERT(VARCHAR(6), @Date, 12) PRINT @TestVariable
方案说明
- 格式码
12是SQL Server原生支持的ISO标准日期格式,转换后输出固定6位长度的yymmdd字符串,自动为个位数的月、日补前导零,不会出现STR函数转换生成的前导空格问题,不需要额外写REPLACE做替换。 - 如果只需要单独提取两位年份,也可以用更简单的写法,不需要嵌套SUBSTRING+STR:
-- 单独取两位年份的写法 RIGHT(CONVERT(VARCHAR(4), YEAR(@Date)), 2) - 所有写法均兼容SQL Server 2008 R2版本,逻辑直白,后续维护不需要拆解多层嵌套函数就能看懂拼接规则。
内容的提问来源于stack exchange,提问作者Chrisl007
相关产品推荐
相关产品推荐

