我有一个字符串,可能包含也可能不包含重复字母z
。重复的z's
将始终以数字开头。它被用作填充物。我遇到的问题是该字符串可能包含合法字母z's
,前面没有数字,所以我无法用z's
简单地替换所有''
。
以下是一个示例:
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 '
结果应为:
Process Level = 31129 Process Level = 32045 Leader = Gail Zimmerman Process Level >= 21 AND Process Level <= 25 Leader = John Schwartz
答案 0 :(得分:0)
愚蠢的问题;为什么在WORLD中你会使用标准字符作为填充物?
无论如何......这有点复杂,但是你可以使用REVERSE函数向后翻转字符串,使用LEFT函数修剪现在的LEADING Z(而不是TRAILING),然后再次翻转字符串。
完成“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
答案 1 :(得分:0)
这适用于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
看起来字符串是从其他字段中选择的。如果可能的话,与它们合作会更简单。