簡體   English   中英

在sql中刪除任何while循環的列中的前導零

[英]remove leading zero from column with out any while loop in sql

我有一個accountNo列varchar(50)

樣本數據

000qw33356
034453534u
a56465470h
00000000a1

我需要像...那樣的輸出

qw33356
34453534u
a56465470h
a1

我有限制,我不能在側面UDF中使用while循環,因為這會產生性能問題。

如果您的數據不包含空格,您可以使用:

select replace(ltrim(replace(data, '0', ' ')),' ', '0')

如果有空格,您可以先將它們替換為其他不存在的空格,然后在最后替換它們。

這是一個有點可愛的變體,不需要替換角色(雖然這是我通常使用的那個):

declare @t table (Val varchar(20))
insert into @t(Val) values
('000qw33356'),
('034453534u'),
('a56465470h'),
('00000000a1')

select SUBSTRING(Val,PATINDEX('%[^0]%',Val),9000)
from @t

結果:

--------------------
qw33356
34453534u
a56465470h
a1

基本上,我們只需要從第一個非0字符到結尾的子字符串(假設9000大於輸入字符串長度)

您可以使用PATINDEX查找拳頭非零字符。 然后從這一點獲得一個SUBSTRING到一個字符串的結尾:

SUBSTRING(accountNo, PATINDEX('%[^0]%',accountNo),1000)

試試吧

DECLARE @tbl TABLE(Test VARCHAR(MAX));
INSERT INTO @tbl VALUES
 ('000qw33356')
,('034453534u')
,('a56465470h')
,('00000000a1');

SELECT SUBSTRING(Test,PATINDEX('%[^0]%',Test),1000)
FROM @tbl

您可以使用PATINDEX

DECLARE @table TABLE(Data VARCHAR(MAX));
INSERT INTO @table VALUES
('000qw33356'),
('034453534u'),
('a56465470h'),
('00000000a1')

SELECT SUBSTRING(Data,PATINDEX('%[^0]%',Data),8000)
FROM @table

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM