如何在SQL中合并列生成指定格式的DocNo字段?
生成指定格式DocNo字段的SQL实现
直接通过字符串拼接即可实现需求,以下是两种兼容不同SQL Server版本的写法:
方法一:使用FORMAT函数(SQL Server 2012及以上版本)
SELECT module, cycle, autoNum, module + FORMAT(cycle, 'yyMM') + '-' + FORMAT(autoNum, '00000') AS DocNo FROM [Inventory].[dbo].[tbl_invoiceGIN]
FORMAT(cycle, 'yyMM'):将Date类型的cycle转换为两位年份+两位月份的字符串(如2023年1月转为2301)FORMAT(autoNum, '00000'):将int类型的autoNum格式化为5位补零字符串(如1转为00001)- 用
+拼接三个部分并添加分隔符-,得到IN2301-00001格式的DocNo
方法二:兼容低版本SQL Server(2012之前)
如果你的SQL Server版本不支持FORMAT函数,可以用CONVERT和字符串截取的方式实现:
SELECT module, cycle, autoNum, module + RIGHT(CONVERT(varchar(8), cycle, 112), 4) + '-' + RIGHT('00000' + CAST(autoNum AS varchar(5)), 5) AS DocNo FROM [Inventory].[dbo].[tbl_invoiceGIN]
RIGHT(CONVERT(varchar(8), cycle, 112), 4):先将日期转为yyyyMMdd格式,再截取后4位得到yyMM格式的字符串RIGHT('00000' + CAST(autoNum AS varchar(5)), 5):通过拼接5个零后截取最后5位,实现补零效果
如果确实需要使用yyyyMM(6位,如202301)格式的cycle,只需将上述代码中的yyMM替换为yyyyMM,或调整截取长度即可,最终会得到IN202301-00001格式的结果。
内容的提问来源于stack exchange,提问作者So Phea
相关产品推荐
相关产品推荐

