Ich habe dasselbe auf stackoverflow gepostet (bitte lassen Sie mich wissen, wenn ich einen löschen muss).
Ich arbeite an einer DB2-Datenbank und soweit ich sehen kann, wird regulärer Ausdruck nicht unterstützt (ohne zusätzliche Bibliotheken).
Daher kann ich nichts Ähnliches implementieren, wie in diesem Artikel " Bringing the Power of Regular Expression Matching to SQL " erläutert.
Wissen Sie, ob ich mit einer SQL-Anweisung einen regulären Ausdruck wie diesen "emulieren" kann?
^ a [aofdmep] {1} [az] {1} [a-z0-9] {4} [sidbfkfpo] {1}
Bearbeiten
In der obigen Hypothese fand ich, dass es für meinen Fall ein WHERE Like-Prädikat akzeptabel ist :
WO USER_NAME NICHT WIE 'a_______'
Aber es ist unsicher und deckt keine anderen Fälle ab, in denen ich kein festes Zeichen habe, mit dem ich übereinstimmen kann.
quelle
Antworten:
Zunächst einmal sind die
{1}
s redundant, also ist es wirklich nur:Dies ist eigentlich ein ziemlich einfaches Muster ... es geht nur um die ersten 8 Zeichen der Zeichenfolge, und es ist immer eine Zeichenfolge mit fester Länge, sodass Sie möglicherweise eine Tabelle mit allen Permutationen erstellen und dann Folgendes tun können:
Leider sind es 7 * 26 * 36 ^ 4 * 9 ... 2,75 Milliarden mögliche Kombinationen, aber immer noch feste Zeichenfolgen, so dass Sie Folgendes tun können:
(Füllen Sie die
...
Bits natürlich aus)oops, es gibt zwei
f
s in dieser letzten Charakterklasse, also gibt es nur 2,45 Milliarden Permutationen.Ich werde nicht so tun, als ob es schnell gehen würde ... es wird wahrscheinlich nicht so sein, aber es wird dir das Muster bringen, nach dem du suchst. Wenn Sie dazu neigen, dies häufig zu tun, würde ich wahrscheinlich eine Zeichentabelle erstellen, damit Sie auf einfache Weise alphanumerisch oder alphanumerisch auswählen können.
quelle
a
von Position 1 auf Position 7 verschoben, als ich das{1}
s entfernt habe?Da diese alte Frage ohnehin ausgegraben wurde, möchte ich erwähnen, dass Sie die in DB2 integrierte XQuery-Unterstützung für den Abgleich regulärer Ausdrücke verwenden können
XMLQUERY
oben ruft die XQuery-matches
Funktion für die Spalte aufUSER_NAME
. Das Ergebnis ist ein XML-Codeboolean
, mit demXMLCAST
es in einen SQL-Datentyp konvertiert wird.quelle
quelle
Aufbauend auf den Antworten von Leigh Riffel und Joe könnten Sie LIKE in Betracht ziehen, wenn Sie eine lange Liste einzelner Zeichen haben oder wenn Sie mehrere Zeichenbereiche haben.
Da Sie dieselbe Zeichenliste mehrmals verwenden, können Sie auch eine konstante Spalte CROSS JOINed verwenden.
Für Ihr Beispiel nicht erforderlich, aber die CROSS JOINed "Tabelle" könnte mehrere benannte Zeichenklassenspalten definieren.
quelle
REGEXP_LIKE ist jetzt in DB2 für iSeries verfügbar - siehe: http://www.itjungle.com/fhg/fhg051915-story01.html
quelle
In DB2 für z / OS würde SQL PASSING wie folgt enthalten
quelle