SQL Server 2008-删除前面带有数字的重复字符
我有一个字符串,它可能包含也可能不包含重复字母SQL Server 2008-删除前面带有数字的重复字符,sql,sql-server-2008,replace,substring,Sql,Sql Server 2008,Replace,Substring,我有一个字符串,它可能包含也可能不包含重复字母z。重复的z的前面总是有一个数字。它被用作填充物。我遇到的问题是,字符串可能包含合法的字母z,前面没有数字,因此我无法简单地将所有z替换为' 以下是一个示例: declare @criteria varchar(max) set @criteria = ' Process Level = 31129 Process Level = 32045zzzz Leader = Gail Zimmerman Process Level &
z
。重复的z的
前面总是有一个数字。它被用作填充物。我遇到的问题是,字符串可能包含合法的字母z
,前面没有数字,因此我无法简单地将所有z
替换为'
以下是一个示例:
declare @criteria varchar(max)
set @criteria = ' Process Level = 31129 Process Level = 32045zzzz Leader = Gail Zimmerman Process Level >= 21 AND Process Level <= 25zzzzzzz Leader = John Schwartz '
declare@criteria varchar(最大值)
设置@criteria='过程级别=31129过程级别=32045ZZZ领导=Gail Zimmerman过程级别>=21和过程级别愚蠢的问题;你到底为什么要用标准字符作为填充符
无论如何。。。这有点复杂,但您可以使用REVERSE函数向后翻转字符串,使用LEFT函数修剪现在领先的Z(而不是拖尾),然后再次反转字符串
完整的“aircode”(更倾向于VBA,因为这是我的强项),但我的想法如下:
X = REVERSE(ProcessLevel)
For Z = 1 to Len(X)
If Left(X) = "Z" then
X = Right(X, Len(X) -Z)
Else
X = Reverse(X)
EndIf
Next Z
ProcessLevel = X
这是针对T-SQL的,在其他RDBMS中可能存在语法变化
免责声明:这很慢,而且确实不是很漂亮,但是由于完整的正则表达式不是SQL的一部分,如果您必须在该语言中执行此操作,那么就没有什么可以做的了
while @criteria like '%[0-9]Z%'
begin
select @criteria = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@criteria, '1z','1'), '2z', '2'), '3z','3'),'4z','4'),'5z','5'),'6z','6'),'7z','7'),'8z','8'),'9z','9'),'0z','0')
end
select @criteria
看起来该字符串是从其他字段的选择中组合而成的。如果可能的话,与他们一起工作会简单得多。我不是正则表达式大师,如果你能得到更好的答案,我尝试完整地回答会非常缓慢,但有些事情是类似于[[number]][z]
查找这些部分可能是必需的-不确定您使用什么RDBMS来提供更具体的语法,但您特定RDBMS中的正则表达式可能是一个很好的起点。从研究角度来看,“列”的数量是否固定?有多少列?谢谢,很遗憾,regex不是一个可用的命令。这些列不是固定的。数据可以为空,也可以多达数千个字符。这是一个审计日志,字段是ntext。是的,它是其他字段的组合,不幸的是,我必须查询日志中的数据(时间点),因此我仅限于日志所包含的内容。日志的设置不是单独提供字段,而是在一个长字段(有时很长)中列出操作。这段代码可以工作,我正在为查询的另一部分做类似的事情,我希望避免大量的替换语句,但至少我知道这会对您所做的工作起作用;我写了封信,谢谢。我问了同样的问题。不幸的是,我没有控制权,我只是对它提出质疑。谢谢你的回复,这听起来很有趣。
while @criteria like '%[0-9]Z%'
begin
select @criteria = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@criteria, '1z','1'), '2z', '2'), '3z','3'),'4z','4'),'5z','5'),'6z','6'),'7z','7'),'8z','8'),'9z','9'),'0z','0')
end
select @criteria