前導零的任何while循環我有一個accountNo柱VARCHAR(50)remove從柱,用SQL
樣本數據
000qw33356
034453534u
a56465470h
00000000a1
我需要輸出像..
qw33356
34453534u
a56465470h
a1
我有限制,因爲這是造成性能問題,我不能在側面UDF循環中使用。
前導零的任何while循環我有一個accountNo柱VARCHAR(50)remove從柱,用SQL
樣本數據
000qw33356
034453534u
a56465470h
00000000a1
我需要輸出像..
qw33356
34453534u
a56465470h
a1
我有限制,因爲這是造成性能問題,我不能在側面UDF循環中使用。
如果你的數據不包含空格,你可以使用:
select replace(ltrim(replace(data, '0', ' ')),' ', '0')
如果有空間,你可以先更換他們別的東西不存在,然後替換回底。
當一個值已經有一個空間時會發生什麼,例如'a564654 70h' – StackUser
@StackNewUser就像我說的那樣,在這種情況下,空間應該先被替換爲其他東西,然後再回到空間。否則它會變成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(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
valex,Damien_the_unbeliever和我們,我們已經在同一分鐘(幾乎)發佈了完全相同的建議。你爲什麼在30分鐘後重復這個答案? – Shnugo
你已經嘗試一些? –