如何 trim SQL 服务器中串联字段中每个值的前导零

How to trim leading zeros of each value in a concatenated field in SQL Server

我有如下要求。

输入:

00113|0267|0139

预期输出:

113|267|139

输入直接来自文件,不是生成的字段

截至目前,我正在使用以下代码将字段拆分为多个值,然后使用 PatindexSubstring 函数对其进行修整,最后再次将它们连接起来

Substring(col, 1,charindex('|',col)-1) part1,
Substring(col,charindex('|',col)+1,(charindex('|', col, charindex('|', col, 1)+1)-charindex('|',col)-1)) part2,
Substring(col,charindex('|', col, charindex('|', col, 1)+1)+1,len(col)) part3

让我知道是否有更好的方法可以在不使用这么多字符串解析函数的情况下实现这一点

一个选项是简单地使用 replace()

例子

Declare @YourTable Table ([SomeCol] varchar(50))  Insert Into @YourTable Values 
 ('00113|0267|0139')

Select * 
      ,NewVal = stuff(replace(replace(replace('|'+SomeCol,'|0','|'),'|0','|'),'|0','|'),1,1,'')
 From @YourTable

Returns

SomeCol          NewVal
00113|0267|0139  113|267|139

尝试以下操作:

declare @i int = 0

while (patindex('%|0%', '|'+@str) > 0)
begin
    set @str = ( replace(substring('|'+ @str, 1, patindex('%|0%', '|'+@str)+1 ), '|0', '|') + substring(@str, patindex('%|0%', '|'+@str)+1, len(@str)) )
    set @i += 1
end

select stuff(@str, 1, @i, '')

您也可以像下面这样使用 string_split

select STUFF((SELECT  '|' + convert(varchar(100), convert(int, nullif(value, '')))
                  FROM string_split(@str, '|') t
                   FOR XML PATH ('')) , 1, 1, '') Grouped_Value

请找到数据库<>fiddle here.