LIKE ergebnis in THEN

Forum für neue Firebird-Anwender.

Moderator: thorben.braun

Antworten
flavor
Beiträge: 4
Registriert: Do 20. Feb 2020, 19:12

Guten Abend!

Ich bin firebird Neuling und habe mir Firebird 3 installiert.

Ich würde gerne das LIKE Ergebnis als THEN nutzen, da mein Programmcode am Ende ungeahnte Ausmaße annehmen würde. Leider ist mir nicht klar, wie ich das lösen kann.

Hier ein Beispiel mit Uhrzeit:

Code: Alles auswählen

    CASE      
       WHEN T1.FREIFELD5 >'00:00' AND T1.FREIFELD5 <'23:59' THEN T1.FREIFELD5
       WHEN T2.BEZEICHNUNG LIKE '%bis 09:00%' THEN '09:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 10:00%' THEN '10:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 11:00%' THEN '11:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 12:00%' THEN '12:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 13:00%' THEN '13:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 14:00%' THEN '14:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 15:00%' THEN '15:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 16:00%' THEN '16:00'
       WHEN T2.BEZEICHNUNG LIKE '%bis 17:00%' THEN '17:00'    
       ELSE '17:00'
    END as LiefBis,
Im Grunde sollte die Uhrzeit aus einem Textfeld mittels LIKE ausgelesen werden können und in ein Zeitfeld importiert werden.

Vielen Dank vorab für Ihre Hilfestellung.

Beste Grüße

flavor
bfuerchau
Beiträge: 484
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Ich habe deine Frage nicht ganz verstanden, aber man kann es u.U. vereinfachen:

case when position('bis ' in T2.BEZEICHNUNG) >= 1
then substring(T2.BEZEICHNUNG from position('bis ' in T2.BEZEICHNUNG) + 4 for 5)
else '17:00'
end

Wenn es das ist, was du meinst.
https://firebirdsql.org/refdocs/langref ... ition.html
https://firebirdsql.org/refdocs/langref ... tring.html
flavor
Beiträge: 4
Registriert: Do 20. Feb 2020, 19:12

bfuerchau hat geschrieben: Fr 21. Feb 2020, 11:18 Ich habe deine Frage nicht ganz verstanden, aber man kann es u.U. vereinfachen:

case when position('bis ' in T2.BEZEICHNUNG) >= 1
then substring(T2.BEZEICHNUNG from position('bis ' in T2.BEZEICHNUNG) + 4 for 5)
else '17:00'
end

Wenn es das ist, was du meinst.
https://firebirdsql.org/refdocs/langref ... ition.html
https://firebirdsql.org/refdocs/langref ... tring.html
Eine große Hilfe! - vielen herzlichen Dank!

Das ist genau was ich benötigt habe. Du hast mir viel Ärger und Stress erspart. Abgesehen von den, den ich dadurch schon hatte.
flavor
Beiträge: 4
Registriert: Do 20. Feb 2020, 19:12

Hallo bfuerchau !

Ich arbeite nun jetzt eine ganze Weile mit dem Substring.

So sieht es bei mir aus:

Code: Alles auswählen

CASE WHEN POSITION('-u.-' IN T3.FREIFELD3) >= 1 THEN SUBSTRING(T3.FREIFELD3 FROM POSITION('-u.-' IN T3.FREIFELD3) -11 FOR 5) /* ELSE ''*/ END as MONTAG1, 
Nun ist ein Fehler aufgekommen. Wenn vor dem '-u.-' keine Daten im Datenfeld enthalten sind, wird die gesamte Abfrage abgebrochen.

Für gewöhnlich steht dann im Datenfeld so etwas wie: 06:00-17:30-u.-12:00-13:15

Lässt sich das irgendwie verhindern?

Beste Grüße

flavor
bfuerchau
Beiträge: 484
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Wie wäre es mit:

CASE WHEN POSITION('-u.-' IN T3.FREIFELD3) > 11 THEN SUBSTRING(T3.FREIFELD3 FROM POSITION('-u.-' IN T3.FREIFELD3) -11 FOR 5) /* ELSE ''*/ END as MONTAG1,
flavor
Beiträge: 4
Registriert: Do 20. Feb 2020, 19:12

Danke! Das läuft.

Versteh die Logik nicht: >=1 ist doch größer!?
bfuerchau
Beiträge: 484
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

POSITION('-u.-' IN T3.FREIFELD3) -11 FOR 5)

Da steckt die Logik!
Antworten