在 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 中为指定的值范围填充前导零的字符串的主要内容,如果未能解决你的问题,请参考以下文章

用 SQL 填充稀疏数据(Rockset)

从 SQL Server 表中为直方图创建范围箱

EXCEL中如何查找区域内满足条件的值,并依次将其对应的值依次输出至指定区域?

如何在 Netezza SQL 中用前导零填充整数

SQL Server生成指定范围内的随机数

在 SQL Server 中为默认值或绑定生成脚本