SQL Server 2008 - 删除以数字开头的重复字符

时间:2013-06-10 15:35:52

标签: sql sql-server-2008 replace substring

我有一个字符串,可能包含也可能不包含重复字母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   

2 个答案:

答案 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

看起来字符串是从其他字段中选择的。如果可能的话,与它们合作会更简单。