在 SQL Server 中为指定的值范围填充前导零的字符串
Posted
技术标签:
【中文标题】在 SQL Server 中为指定的值范围填充前导零的字符串【英文标题】:Pad A String With Leading Zeros for Specified Value Range in SQL Server 【发布时间】:2014-04-27 01:51:11 【问题描述】:我在Pad a string with leading zeros so it's 3 characters long in SQL Server 2008使用了答案
在我的例子中用前导零填充一列,它是两个零,我正在使用这个:
RIGHT('0'+ISNULL(REPLACE(<columnName>, '"', ''),''),2)
数据范围从 1 到 99,但还包括使用此方法截断的未知值“UNK”。
在处理同一列中的文本和数字时,有没有办法解决这个问题,或者我应该探索不同的解决方案?
干杯
J
【问题讨论】:
【参考方案1】:(第二次修订) 试试这个:
SELECT CASE WHEN LEN(ISNULL(<columnName>, '')) > 1
THEN ISNULL(<columnName>, '')
ELSE RIGHT ('00'+ ISNULL(<columnName>, ''), 2)
END
示例输入/输出:
Input NULL / Ouput '00'
Input 'UNK' / Ouput 'UNK'
Input '1' / Ouput '01'
Input '99' / Ouput '99'
【讨论】:
嗨@bastos.sergio,谢谢你的回答——是否可以在一个语句中同时处理 UNK 和单/双数字值? 例如我想将 1 转换为“01”,但将 10 保留为“10”,将 UNK 保留为“UNK”。因此,实际上只在单个数字上添加一个零,而其他所有内容都保持不变。 太好了,非常感谢您抽出宝贵时间回答!【参考方案2】:关于@bastos.sergio 的回答下方添加的评论:
SELECT CASE isnumeric(Val) AND len(Val) = 1 THEN '0' + Val ELSE Val END
【讨论】:
以上是关于在 SQL Server 中为指定的值范围填充前导零的字符串的主要内容,如果未能解决你的问题,请参考以下文章