如何 trim SQL 服务器中串联字段中每个值的前导零
How to trim leading zeros of each value in a concatenated field in SQL Server
我有如下要求。
输入:
00113|0267|0139
预期输出:
113|267|139
输入直接来自文件,不是生成的字段
截至目前,我正在使用以下代码将字段拆分为多个值,然后使用 Patindex
和 Substring
函数对其进行修整,最后再次将它们连接起来
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.
我有如下要求。
输入:
00113|0267|0139
预期输出:
113|267|139
输入直接来自文件,不是生成的字段
截至目前,我正在使用以下代码将字段拆分为多个值,然后使用 Patindex
和 Substring
函数对其进行修整,最后再次将它们连接起来
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.