我有一个accountNo列varchar(50)
示例数据
000qw33356
034453534u
a56465470h
00000000a1
我需要输出...
qw33356
34453534u
a56465470h
a1
我有限制,我不能在侧面UDF中使用while循环,因为这会产生性能问题。
答案 0 :(得分:4)
如果您的数据不包含空格,则可以使用:
select replace(ltrim(replace(data, '0', ' ')),' ', '0')
如果有空格,您可以先将它们替换为其他不存在的空格,然后在最后替换它。
答案 1 :(得分: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大于输入字符串长度)
答案 2 :(得分:0)
您可以使用PATINDEX查找拳头非零字符。然后从这一点获得一个SUBSTRING到一个字符串的结尾:
SUBSTRING(accountNo, PATINDEX('%[^0]%',accountNo),1000)
答案 3 :(得分:0)
尝试这样
DECLARE @tbl TABLE(Test VARCHAR(MAX));
INSERT INTO @tbl VALUES
('000qw33356')
,('034453534u')
,('a56465470h')
,('00000000a1');
SELECT SUBSTRING(Test,PATINDEX('%[^0]%',Test),1000)
FROM @tbl
答案 4 :(得分: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