2

繰り返し文字を含む場合と含まない場合がある文字列があります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   
4

2 に答える 2

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

文字列が他のフィールドの選択から結合されているようです。可能であれば、それらを使用する方がはるかに簡単です。

于 2013-06-10T16:00:05.150 に答える
0

ばかげた質問です。なぜ世界で標準的な文字をフィラーとして使用するのですか??

とにかく...これはちょっと複雑ですが、REVERSE 関数を使用して文字列を逆方向に反転し、LEFT 関数を使用して (TRAILING ではなく) 現在の LEADING Z をトリムしてから、文字列を再度 REVERSE することができます。

「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
于 2013-06-10T15:54:43.630 に答える