tsql regex oder nicht regex

bei einem sql statement stoesst man irgendwann an die grenzen der moeglichkeiten normaler vergleichsoperatoren. regulaere ausdruecke muessen her! .. denkt man sich dann. in microsofts tsql ist sowas in der art eingebaut. eigentlich nicht wirklich vergleichbar mit regulaeren ausdruecken, aber sieht ein bischen aus als ob.

und irgendwann stoesst man dann auch dabei auf grenzen. und wenn die moeglichkeiten bis zum letzten ausgereitzt sind, merkt man auch, dass nicht alles so funktioniert, wie es soll. zum demonstrieren ein kleines beispiel. (das hatte ich so aehnlich vor laengerer zeit mal auf irgendeiner webseite gefunden.)

DECLARE @tmp TABLE (wert char(1))

INSERT INTO @tmp (wert) VALUES ('1')
INSERT INTO @tmp (wert) VALUES ('A')
INSERT INTO @tmp (wert) VALUES ('a')
INSERT INTO @tmp (wert) VALUES (NULL)
INSERT INTO @tmp (wert) VALUES (' ')
INSERT INTO @tmp (wert) VALUES ('')
INSERT INTO @tmp (wert) VALUES ('J')
INSERT INTO @tmp (wert) VALUES ('!')
INSERT INTO @tmp (wert) VALUES ('9')
DECLARE @x varchar(10)

SET @x = 'MATCH'

SELECT wert,
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[A-Z]') THEN @x
  ELSE '' END AS '[A-Z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[a-z]') THEN @x
  ELSE '' END AS '[a-z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[a-zA-Z]') THEN @x
  ELSE '' END AS '[a-zA-Z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[0-9]') THEN @x
  ELSE '' END AS '[0-9]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[0-8]') THEN @x
  ELSE '' END AS '[0-8]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[A-Z|0-9]') THEN @x
  ELSE '' END AS '[A-Z|0-9]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[J]') THEN @x
  ELSE '' END AS '[J]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[JERRY]') THEN @x
  ELSE '' END AS '[JERRY]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '%[A]%') THEN @x
  ELSE '' END AS '%[A]%',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[ ]') THEN @x
  ELSE '' END AS '[ ]'
FROM @tmp as t

das ergebniss sieht dann so aus:
(anklicken zum vergroessern)

man sieht, dass “[A-Z]” richtig funktioniert und “[a-z]” nicht so ganz und “[ ]” findet leerzeichen, aber auch “kein zeichen”. fuer viele sachen ist es aber doch sehr brauchbar, wenn man die fehler kennt. wer mehr moeglichkeiten braucht, kommt um ein bischen programmieraufwand oder kauf von fertigen addons nicht herum.

Author: sd

Leave a Reply

Your email address will not be published. Required fields are marked *