在SQL Server 2008中通过正则表达式删除特定文本的特定字符

在SQL Server 2008中通过正则表达式删除特定文本的特定字符,sql,sql-server,regex,sql-server-2008,regex-group,Sql,Sql Server,Regex,Sql Server 2008,Regex Group,我正在使用SQLServer2008 数据: 我需要做的是,只有在看到除0之外的数字后,才在开始时删除连续零,允许使用连续零,并使用正则表达式从输出中的字符串中删除斜杠/字符 预期产出: AA1234599 AX4568704478 XB7700812 我通过这个查询成功地做到了: select dbo.RegexGroup(t.Value,'(?<prefix>\w\w)(?<zeros>0*)(?<beforeslash>\d*)/(?<after

我正在使用SQLServer2008

数据:

我需要做的是,只有在看到除0之外的数字后,才在开始时删除连续零,允许使用连续零,并使用正则表达式从输出中的字符串中删除斜杠/字符

预期产出:

AA1234599
AX4568704478
XB7700812
我通过这个查询成功地做到了:

select dbo.RegexGroup(t.Value,'(?<prefix>\w\w)(?<zeros>0*)(?<beforeslash>\d*)/(?<afterslash>\d\d)', 'prefix') +
       dbo.RegexGroup(t.Value,'(?<prefix>\w\w)(?<zeros>0*)(?<beforeslash>\d*)/(?<afterslash>\d\d)', 'beforeslash') +
       dbo.RegexGroup(t.Value,'(?<prefix>\w\w)(?<zeros>0*)(?<beforeslash>\d*)/(?<afterslash>\d\d)', 'afterslash') 
from table t
不过,我相信应该有一个更好、更专业的方法来处理这个问题。必须使用正则表达式。如有任何建议,将不胜感激


dbfiddle

这里有一个选项。查询将字符串分为两部分,第一部分是字母,第二部分是数字。通过用空格替换并应用ltrim函数删除0

输出:

AA00012345/99         AA12345/99
AX0000045687044/78    AX45687044/78
XB000077008/12        XB77008/12

不起作用。顺便说一句,略微编辑了问题。尝试了替换,但无法使其正常工作。也许我做错了,你能用问题中的示例数据帮我试一下吗?前两位是常数吗?您可以利用这样的强制转换,如果它们是:选择强制转换“0000045687044”作为整数,前两个数字是常量,它们总是字母。显然,还需要一个子字符串。顺便说一句,我也希望看到一个正则表达式解决方案。我的方法相当简单。这很好,但它删除了所有的零。我只想在一开始就删除连续的零。请重新检查问题中的预期输出。@ErayBalkanli,遗漏了该部分。添加了另一个替换。
DECLARE @v varchar(100);

SET @V = 'AA00012345/99';
SELECT REPLACE(REPLACE(@v, SUBSTRING(@v, PatIndex('%[0]%', @v), 1), ''), '/', '')

SET @V = 'AX0000045687044/78';
SELECT REPLACE(@v, SUBSTRING(@v, PatIndex('%[0]%', @v), 1), '')

SET @V = 'XB000077008/12';
SELECT REPLACE(@v, SUBSTRING(@v, PatIndex('%[0]%', @v), 1), '')

GO
| (No column name) | | :--------------- | | AA1234599 | | (No column name) | | :--------------- | | AX4568744/78 | | (No column name) | | :--------------- | | XB778/12 |
declare @t table (c varchar(100))
insert into @t
values ('AA00012345/99')
    ,('AX0000045687044/78')
    ,('XB000077008/12')

select
    t.c, q2.p1 + replace(replace(ltrim(replace(q2.p2, '0', ' ')), ' ', '0'), '/', '')
from 
    @t t
    cross apply (select ci = patindex('%[0-9]%', t.c)) q1
    cross apply (select p1 = substring(t.c, 1, q1.ci - 1), p2 = substring(t.c, q1.ci, len(t.c))) q2
AA00012345/99         AA12345/99
AX0000045687044/78    AX45687044/78
XB000077008/12        XB77008/12