【问题标题】:Pad A String With Leading Zeros for Specified Value Range in SQL Server在 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

【问题讨论】:

    标签: sql sql-server tsql padding


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2012-03-20
      • 2018-11-14
      • 1970-01-01
      相关资源
      最近更新 更多