【问题标题】:Remove Leading Zero(s) For Each Section Separated by '.' Except When '.0.'删除以“。”分隔的每个部分的前导零除了当“.0”。
【发布时间】:2020-08-03 18:18:58
【问题描述】:

在 TSQL 中,我需要创建一个脚本来删除“.”之间的所有前导零,从字符串中的第一个 0 开始,除非有“.0”。任务编号中间的任何位置。当任务号没有 EX: 111.0.123.234 时,我到目前为止做得很好,但我似乎无法弄清楚 SUBSTRING/CHARINDEX/PATINDEX 等的组合来删除所有前导零,除非零是唯一的'.' 之间的数字请参阅随附的屏幕截图和脚本/部分结果作为示例。

这是我的脚本:

SELECT TASKPRODUCTID, (CASE WHEN TASKPRODUCTID NOT LIKE '%.0.%' THEN
REPLACE(LTRIM(REPLACE(TASKPRODUCTID,'0','')),' ','0') ELSE 
SUBSTRING(TASKPRODUCTID, PATINDEX('%[^0 ]%', TASKPRODUCTID + ' '),  LEN(TASKPRODUCTID))
END) AS NewTaskProductID
FROM TASK

这是部分结果集:

TASKPRODUCTID                        NewTaskProductID
003.007.002.001                      3.7.2.1
003.007.002.003                      3.7.2.3
004.003.003.008.0.2017275.132925     4.003.003.008.0.2017275.132925
004.005.001.003                      4.5.1.3
004.005.004.004.0.2017275.135139     4.005.004.004.0.2017275.135139
004.005.007.005.0.2017275.140304     4.005.007.005.0.2017275.140304
002.001.002                          2.1.2
002.004                              2.4
016.010                              16.1

Screenshot Example of leading zero in highlighted rows still have leading zeros in next decimal section(s)

谢谢!!

【问题讨论】:

    标签: leading-zero


    【解决方案1】:

    您可以尝试使用 STUFF() 来获取 .0。在其他情况下

    declare @s AS varchar(100) = '0010.0.005.006025'
    
    print stuff(REPLACE(LTRIM(REPLACE(@s,'0','0')),'0','*'), 
     patindex('%.*.%',REPLACE(LTRIM(REPLACE(@s,'0','0')),'0','*')), 3,'.-.')
    

    输出

    **1*.-.**5.**6*25
    

    现在将此视为第一种情况;唯一的区别是我们得到的是 '*' 而不是 '0'

    【讨论】:

    • 我会试试这个,看看我可以如何编辑以获得所需的结果。感谢您抽出时间至少做出回应并将我发送到不同的方向!
    • @MarlaDeAnnHaase 完成后就可以进行查询了!!
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2013-07-14
    • 2017-07-10
    • 2016-03-06
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多