Announcement

Collapse
No announcement yet.

Filtern von Teilinformation einer Spalte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Filtern von Teilinformation einer Spalte

    Hi zusammen,

    ich habe eine Spalte, in der mehrere Informationen stecken. Neulich habe ich gelernt, dass man diese mit Substrings in mehrere Zellen aufteilen kann. In einem anderem Kontext würde ich gerne Teil-Informationen dieser Spalte filtern. Hier ein Beispiel:
    Tätigkeit
    1. Anruf Inbound – erreicht – Dauer: 00:00:40
    Ich würde für eine Zählung gerne nur die anzeigen lassen, die über 30 Sekunden dauerten...

    Ist sowas möglich? Komme ich hier mit einer simplen Abfrage "Where Tätigkeit..." weiter?

    Besten Dank.

    LG Felix

  • #2
    Wenn du kein ordentliches Datenmodell hast, sondern Importdaten o.ä. und viel darauf arbeiten musst, kannst Du sie auch einmalig aufhübschen und dann über einen View typgerecht nach Bedarf ansprechen und durchsuchen. Das Beispiel ist in Oracle, welche Operationen in mySQL zu verwenden sind, hat Christian ja schon geschrieben.
    Dabei kannst Du den View so bauen, wie benötigt, oder mehrere nach Bedarf.
    Aber Vorsicht, bei großen Datenmengen ist es aus Performancegründen sicher besser, die Daten ordentlich zu modellieren.
    Code:
    SQL> select * from basisdaten;
     ID IRGENDWAS              TÄTIGKEIT                                         IMPORTDATUM
    --- ---------------------- ------------------------------------------------- -----------
      1 chhflkjbxnejpnytktef   Anruf Inbound - erreicht - Dauer: 00:00:40        15.01.2019
      3 wtirhrqlopoirpnwbxma   Anruf Outbound - nicht erreicht - Dauer: 00:00:00 15.01.2019
      3 jdwppsvzaeeselmjyyrz   Anruf Inbound - erreicht - Dauer: 00:00:29        15.01.2019
      4 ayjpdsfrkkttwaumleqi   Anruf Outbound - AB - Dauer: 00:00:31             15.01.2019
    
    SQL>
    SQL> create view basisdaten_extrakt as
      2  select id,  irgendwas, tätigkeit, importdatum ,
      3     substr(tätigkeit, 1, instr(tätigkeit,'-')-2) as t_richtung,
      4     substr(tätigkeit, instr(tätigkeit,'-')+2,instr(tätigkeit,'-',1, 2)-instr(tätigkeit,'-')-3) as t_ergebnis,
      5     substr(tätigkeit, instr(tätigkeit,'-',1,2)+9, 100) as t_dauer_orig,
      6     to_Date(substr(tätigkeit, instr(tätigkeit,'-',1,2)+9, 100) , 'HH24:MI:SS')  as t_dauer_date,
      7     to_char(to_Date(substr(tätigkeit, instr(tätigkeit,'-',1,2)+9, 100) , 'HH24:MI:SS'))  as t_dauer_str,
      8     to_number(to_char(to_Date(substr(tätigkeit, instr(tätigkeit,'-',1,2)+9, 100) , 'HH24:MI:SS'),'sssss'))  as t_dauer_sek
      9    from basisdaten
     10  ;
    View created
    
    SQL> select * from basisdaten_extrakt;
      ID IRGENDWAS              TÄTIGKEIT                                         IMPORTDATUM T_RICHTUNG      T_ERGEBNIS      T_DAUER_ORIG T_DAUER_DATE T_DAUER_STR T_DAUER_SEK
    ---- ---------------------- ------------------------------------------------- ----------- --------------- --------------- ------------ ------------ ----------- -----------
       1 enzqbrvxgtoaweliedtb   Anruf Inbound - erreicht - Dauer: 00:00:40        15.01.2019  Anruf Inbound   erreicht        00:00:40     01.01.2019 0 01.01.19             40
       3 jkqgjpwtfbqxlzaizpem   Anruf Outbound - nicht erreicht - Dauer: 00:00:00 15.01.2019  Anruf Outbound  nicht erreicht  00:00:00     01.01.2019   01.01.19              0
       3 krjmhlnqwoiesfzndvkg   Anruf Inbound - erreicht - Dauer: 00:00:29        15.01.2019  Anruf Inbound   erreicht        00:00:29     01.01.2019 0 01.01.19             29
       4 smussojwupvpvdnrvewg   Anruf Outbound - AB - Dauer: 00:00:31             15.01.2019  Anruf Outbound  AB              00:00:31     01.01.2019 0 01.01.19             31
    
    SQL> select * from basisdaten_extrakt where t_dauer_sek>30;
      ID IRGENDWAS              TÄTIGKEIT                                         IMPORTDATUM T_RICHTUNG      T_ERGEBNIS      T_DAUER_ORIG T_DAUER_DATE T_DAUER_STR T_DAUER_SEK
    ---- ---------------------- ------------------------------------------------- ----------- --------------- --------------- ------------ ------------ ----------- -----------
       1 eeyxhqlovkpsbzfdgtjc   Anruf Inbound - erreicht - Dauer: 00:00:40        15.01.2019  Anruf Inbound   erreicht        00:00:40     01.01.2019 0 01.01.19             40
       4 ajgssvwnjwuhaiezdgho   Anruf Outbound - AB - Dauer: 00:00:31             15.01.2019  Anruf Outbound  AB              00:00:31     01.01.2019 0 01.01.19             31
    
    SQL>

    Comment


    • #3
      select * from table TIME_FORMAT(SUBSTR(Spalte,LOCATE('Dauer:',Tätigkei t)+7,8),'%H:%i:%s') > '00:00:30'
      Die 7 ist für den Versatz von Beginn "Dauer" zu der ersten Ziffer. Ggf. ändern

      Testen mit

      select TIME_FORMAT(SUBSTR(Tätigkeit,LOCATE('Dauer:',Tätig keit)+7,8),'%H:%i:%s') from table
      Zuletzt editiert von Christian Marquardt; 18.01.2019, 16:51.
      Christian

      Comment

      Working...
      X