You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:33:11