Eigentlich finde ich alle Artikel von Robyn Page und Phil Factor (ein Pseudonym) von sehr gut. Sie sind gut durchdacht und bieten gerne unkonventionelle Ansätze. Erst neulich las ich den Artikel A T-SQL Regular Expression Library for SQL Server 2005 in dem Steve Abraham eine TSQL-Funktion beschreibt, um damit reguläre Ausdrücke in TSQL zu ermöglichen. Schon zu dem Zeitpunkt nahm ich mir vor das mal zu testen.
Robyn und Phil machen das gleiche einfach über OLE-Automation. Natürlich hat das den Nachteil, dass man das am Server erlauben muss, aber es ist einfach und flexibel. Die Performance habe ich nicht gemessen, nach deren Aussage sollte CLR aber schneller sein. Dennoch gefällt mir der Ansatz sehr gut. Egal für welches der beiden Modelle man sich entscheidet, der Artikel ist für beide lehrreich.
Ein Beispiel für eine schon recht komplexe Abfrage mittels TSQL:
--A valid email address?
SELECT dbo.RegexMatch('^(([a-zA-Z0-9!#\$%\^&\*\{\}''`\+=-_\|/\?]+(\.[a-zA-Z0-9!#\$%\^&
\*\{\}''`\+=-_\|/\?]+)*){1,64}@(([A-Za-z0-9]+[A-Za-z0-9-_]*){1,63}\.)*(([A-Za-z0-9]+[A
-Za-z0-9-_]*){3,63}\.)+([A-Za-z0-9]{2,4}\.?)+){1,255}$','Phil.Factor@simple-Talk.com')
Wer gerne solche Dinge machen würde, der sollte unbedingt den Artikel "TSQL Regular Expression Workbench" lesen…
Schön, wenn ich im www auf Leute stoße, die ich kenne und die sich auskennen.
-- Poor mans regular expression (z.B. zum Validieren von Parametern):
declare @version nvarchar(16),
@match int;
set @version = 'v.11.5';
select @match = case
when @version like N'v.[0-9].[0-9]' then 1
when @version like N'v.[1-9][0-9].[0-9]' then 1
else 0
end
select @match as Match, @version as Version
Hallo Detlef,
Du bist herzlich willkommen.
Ja, LIKE mag ich auch. Aber manchmal wünscht man sich schon etwas mehr…
Viele Grüße
Thomas