2016-10-03 8 views
1

In einer MYSQL Tabelle habe ich ein mehrere Texteinträge mit dem Gebiet derMySQL: Reguläre Ausdrücke & Wildcards

Unzulässig Nach: 2. Dezember 2016 19.40.51 GMT

Was ich versuche zu Verwenden Sie REGEXP, um diese Einträge zu finden, und ignorieren Sie alles, was weniger als 31.12.59.59 2016 GMT ist. Was ist der beste Weg, dies zu tun?

Beispiel: SEARCH_STRING where TABLE_COLUMN REGEXP "Nicht gültig nach: blah blah" ist weniger als 31. Dezember 23:59:59 2016 GMT.

Ich weiß, dass das Beispiel ein wenig in der richtigen Syntax fehlt, aber ich bin sicher, dass Sie den Kern dessen, was ich bekomme, bekommen. Wie nehme ich ein festgelegtes Datum, vergleiche es mit dem, was in einer bestimmten Zeichenfolge in den Details eines größeren Textes enthalten ist, und ignoriere alles zwischen jetzt() und der voreingestellten Zeit, die das Ende des Jahres ist?

+1

Bisher habe ich versucht, REGEXP „Unzulässig Nachher:“ nur die richtigen Datensätze zu ziehen, aber was ist, ich bin fehlt, wie man mit dem beschäftigen "Dec 02 19:40:51 2016 GMT" Datumsfeld auf der Zeile "Nicht gültig nach", um alles weniger als 31. Dezember 23:59:59 Uhr 2016 GMT zu ignorieren. Effektiv fordere ich, dass mehrere Dinge gleichzeitig erledigt werden. Isolieren Sie zuerst die Zeile "Nicht gültig nach" im Text. Dann nimm das Datum, das hinter der Zeile "Nicht gültig nach" steht, und vergleiche es mit einem vordefinierten Datum. Vielleicht ist etwas einfacher als REGEXP nicht "nicht gültig nach: * 2016 GMT" Aber können Sie eine REGEXP Wildcard einrichten? – Alby

+0

Chris danke. Ihr Klappentext traf die Stelle .. "nicht REGEXP" nicht gültig nach. * (20 ([0] [0-9] | 1 [0-6]) | 1 [89] [0-9] {2}) GMT "Das ist genau das, was ich brauchte – Alby

Antwort

0

Ich würde wahrscheinlich die DB normalisieren, so dass die Spalte nur ein Datum war, dann könnten Sie Standard-Vergleichsfunktionen (<=) verwenden. Alternativ könnten Sie eine Regex verwenden, die den 4-Jahres-Ganzzahlen entspricht. Etwas wie:

Not Valid After .* (20([0][0-9]|1[0-6])|1[0-9]{3}) GMT" 

in mysql würde es als verwendet werden:

COLUMN not REGEXP "Not Valid After .* (20([0][0-9]|1[0-6])|1[0-9]{3}) GMT" 

Beispiel: http://sqlfiddle.com/#!9/26b735/4

Sie werden die Zeichenklasse erhöhen müssen, 1[0-6] wie die Zeit vergeht; für nächstes Jahr 1[0-7].

+0

Kann jemand bitte meine Frage abstimmen? Danke – Alby

1

Hier ist eine andere Art und Weise, es zu tun:

YEAR(STR_TO_DATE(COLUMN, 'Not Valid After: %b %d %H:%i:%s %Y GMT')) < 2017