Neulich kam ich in die Verlegenheit, mich mit den Stringfunktionen aus Sybase T-SQL auseinanderzusetzen. Ziel war es, den letzten Teil eines Strings zu ermitteln, ohne eine zusätzliche Stored Procedure für die String-Zerlegung zu implementieren.
Ausgangssituation:
Eine Tabelle, die Einträge für verschiedene Logfile-Pfade enthält. Benötigt wird aber nur der Dateiname. Als weitere Schwierigkeit kam hinzu, dass die Anzahl der Trennzeichen (in diesem Fall das ‘/’) unterschiedlich war.
1> select * from tbl_logfiles 2> go logfile_id logfile --------------------------------- --------------------------------------------------------------------------------------------------- 1 /var/log/httpd/httpd-error.log 2 /var/log/sybase/trace/trace.log ... ...
Nach kurzem Nachdenken kam mir folgende Idee:
Lösung:
1> select reverse(substring(reverse(logfile),1, (charindex('/',reverse(logfile))-1))) as filename from tbl_logfiles 2> go filename ------------------------------------------------------- httpd-error.log trace.log ...
Falls es weitere Lösungsvorschläge gibt, dann postet diese bitte unbedingt als Kommentar…