Bereinigen einer Zeichenkette auf alphanumerische Zeichen via SQL

Geschreiben von Marcus Kimpenhausauf20. Februar 2009 in entwicklung |

Heute stand ich vor der Problematik einen String welcher nicht-alphanumerische Zeichen beinhalten könnte auf eine alphanumerische Version “zusammenzuschrumpfen”.

Eine Suche bei google lieferte viele Ergebnisse, aber nicht alle halte ich für wirklich sinnvoll bzw. gut gelöst, sicher liefern sie ein Ergebnis – aber warum soll ich zum Lösen dieses Problems eine Tabelle anlegen – wie z.B. hier: Strim Strips Out Non-Alphanumeric Characters oder hier: Sql Server Tips – Removing or Replacing non-alphanumeric characters in strings beschrieben.

Eine tolle Lösung habe ich dann aber doch noch gefunden und zwar in einem Oracle-Forum *hüstel* RE: Remove non-numeric characters.

Das Ganze in eine StoredProcedure eingebaut könnte dann z.B. so aussehen:

CREATE PROCEDURE SetCompactArticleNumberOnArticle

AS
BEGIN

 DECLARE CompactArticleNumberCursor CURSOR FOR
 SELECT [GUID]
    , VersionNo
    , ArticleNumber
  FROM dbo.Article
 WHERE CompactArticleNumber IS NULL

 DECLARE @GUID UNIQUEIDENTIFIER
 DECLARE @VersionNo INT
 DECLARE @ArticleNumber NVARCHAR(22)
 DECLARE @CompactArticleNumber NVARCHAR(22)
 DECLARE @Position INT

 OPEN CompactArticleNumberCursor

 FETCH NEXT FROM CompactArticleNumberCursor into @GUID ,@VersionNo , @ArticleNumber

 WHILE @@FETCH_STATUS = 0
 BEGIN
  SET @CompactArticleNumber = @ArticleNumber;

  SELECT @Position = PATINDEX('%[^0-9a-Z]%', @CompactArticleNumber);

  WHILE @Position > 0
  BEGIN
   SELECT @CompactArticleNumber = STUFF(@CompactArticleNumber, @Position, 1, '');
   SELECT @Position = PATINDEX('%[^0-9a-Z]%', @CompactArticleNumber);
  END;

  UPDATE Article
    SET CompactArticleNumber = @CompactArticleNumber
   WHERE [GUID] = @GUID AND VersionNo = @VersionNo;

  FETCH NEXT FROM CompactArticleNumberCursor into @GUID ,@VersionNo , @ArticleNumber
 END;

 CLOSE CompactArticleNumberCursor
 DEALLOCATE CompactArticleNumberCursor

END;
GO

Diese StoredProcedure konvertiert, wann immer sie ausgeführt wird, ArtikelNummern in eine alphanumerische Version dieser. Schlüssel dazu sind die beiden T-SQL Funktionen STUFF und PATINDEX.

Wobei STUFF zum Entfernen der nicht-alphnumerischen Zeichen an einer Position verwendet wird und PATINDEX zum Auffinden der nächsten Position eine solchen Zeichens. Einfach aber effektiv und ganz ohne zusätzliche Tabelle. Sehr schön!

Schlagwörter:, , ,

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

Copyright © 2005-2010 marcus' tagebuch All rights reserved.
Desk Mess Mirrored v1.7 theme from BuyNowShop.com.