2016-05-19 75 views
3

前導零的任何while循環我有一個accountNo柱VARCHAR(50)remove從柱,用SQL

樣本數據

000qw33356 
034453534u 
a56465470h 
00000000a1 

我需要輸出像..

qw33356 
34453534u 
a56465470h 
a1 

我有限制,因爲這是造成性能問題,我不能在側面UDF循環中使用。

+0

你已經嘗試一些? –

回答

4

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

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

如果有空間,你可以先更換他們別的東西不存在,然後替換回底。

+0

當一個值已經有一個空間時會發生什麼,例如'a564654 70h' – StackUser

+0

@StackNewUser就像我說的那樣,在這種情況下,空間應該先被替換爲其他東西,然後再回到空間。否則它會變成0. –

1

下面是一個不需要替換字符(雖然那是一個我通常會用)一個有點可愛的變體:

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比輸入字符串長度大)的子字符串

0

您可以使用PATINDEX查找第一個不是零字符。然後得到從這點一個子一個字符串的結尾:

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

嘗試像這樣

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

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

您可以使用PATINDEX

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

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

valex,Damien_the_unbeliever和我們,我們已經在同一分鐘(幾乎)發佈了完全相同的建議。你爲什麼在30分鐘後重復這個答案? – Shnugo