[英]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.