2016-05-26 17 views
0

Ich habe Strings wie:Wie wählt man die Reihenfolge der Ziffern aus der Zeichenfolge in Firebird 2.5?

26.05.2016/00002Lol 
26.05.2016/00003(Lol) 
26.05.2016UUUU/00004(Lol) 

Wie die Sequenz von fünf Ziffern wählen (00002, 00003, 00004) aus diesen Strings?

+1

Mit Firebird 3 können Sie es möglicherweise mit [die neue Regex-Funktion für "SUBSTRING"] (http://firebirdsql.org/file/documentation/release_notes/html/en/3_0/bk01ch09s05.html#rnfb30) tun -dml-Teilzeichenfolge); Ich habe es nicht versucht. Für 2.5 würde ich ernsthaft in Erwägung ziehen, dies in Ihrer Anwendungsebene zu lösen oder eigene UDFs zu schreiben, um sie zu extrahieren. –

Antwort

1

Beschreibung

(?<=\/)[0-9]{5} 

Regular expression visualization

Dieser reguläre Ausdruck folgendes tun:

  • capture die ersten 5 Stellen nach dem \ Charakter

Beispiel

Live Demo

https://regex101.com/r/lD6pW5/1

Beispieltext

26.05.2016/00002Lol 
26.05.2016/00003(Lol) 
26.05.2016UUUU/00004(Lol) 

Probe Spiele

[0][0] = 00002 
[1][0] = 00003 
[2][0] = 00004 

Erklärung

NODE      EXPLANATION 
---------------------------------------------------------------------- 
    (?<=      look behind to see if there is: 
---------------------------------------------------------------------- 
    \/      '/' 
---------------------------------------------------------------------- 
)      end of look-behind 
---------------------------------------------------------------------- 
    [0-9]{5}     any character of: '0' to '9' (5 times) 
---------------------------------------------------------------------- 
+0

Dies funktioniert nicht in Firebird ohne benutzerdefinierte UDFs. Nur Firebird 3.0 unterstützt Regexes in SUBSTRING und selbst dann nur SQL-Regexes (die keine Lookbehind-Unterstützung haben und in Firebird ein explizit definiertes Escape-Zeichen benötigen). – pilcrow

3

Sind diese fünf Stellen immer nach dem ersten '/'? Wenn ja, dann:

SELECT SUBSTRING(col FROM POSITION(col, '/') + 1 FOR 5) AS fivedigits ... 

sollte den Trick tun.