SQL: Feststellen, ob ein String alphanumerisch ist

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Verfügt der SQL-Dialekt über eine translate()-Funktion, lässt sich die Aufgabe damit recht bequem lösen. Im anderen Fall bietet sich eine Lösung über einen Regulären Ausdruck an.


Hinweis für Access-Anwender
Um die folgende Abfrage selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.


Zur Vorbereitung simulieren wir eine (unglückliche) Ausgangslage, und nennen folgende Abfrage dann vw_daten2:

SELECT UCase( ma_name ) AS daten
FROM   mitarbeiter
WHERE  abt_nr = 10
UNION  ALL
SELECT UCase( ma_name ) & ', ' & Format( gehalt, 'Currency' )
FROM   mitarbeiter
WHERE  abt_nr = 20
UNION  ALL
SELECT UCase( ma_name ) & abt_nr
FROM   mitarbeiter
WHERE  abt_nr = 30

Mit folgender Funktion in einem allgemeinen VBA-Modul lässt sich dann ermitteln, ob daten ausschließlich alphanumerisch ist oder nicht.

Private mRE As Object
 
Public Function IsAlphaNumeric(Data As Variant) As Boolean
   Const RE_PATTERN As String = "[^0-9A-Za-zÄÖÜäöüß]"
 
   If mRE Is Nothing Then Set mRE = CreateObject("VBScript.RegExp")
   mRE.Pattern = RE_PATTERN
   IsAlphaNumeric = Not mRE.Test(Nz(Data))
End Function

Diese Abfrage nutzt dann diese Funktion:

SELECT daten
FROM   vw_daten2
WHERE  IsAlphaNumeric( daten )

und ergibt als Resultat:

daten
KÜHNE
KÖNIG
MÜLLER
ALLARD30
WECKER30
MERTENS30
BLANK30
DREHER30
JAKOBS30



In PostgreSQL kann z. B. eine dieser beiden Abfragen verwendet werden:

SELECT daten
FROM   vw_daten2
WHERE  translate( LOWER( daten ), '0123456789abcdefghijklmnopqrstuvwxyzäöüß', rpad( 'x', 40, 'x' ) )
     = rpad( 'x', LENGTH( daten ), 'x' )
SELECT daten
FROM   vw_daten2
WHERE  daten !~ '[^a-zA-Z0-9äöüÄÖÜß]'

Dieser DBFiddle zeigt die Lösungen beider Varianten.



Zurück zur Übersicht