Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zeichen am Ende eines Datensatzes löschen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Lafi2004, 26 März 2015.

  1. Lafi2004

    Lafi2004 Benutzer

    Servus zusammen,

    ich weiß nicht ob ich hier richtig bin, falls nicht bitte ich den Beitrag zu verschieben. Ich habe eine Tabelle und in der Tabelle eine Spalte mit Beschreibungen, in den Beschreibungen ist als letzte Zeile (noch aus Urzeiten) als Abschluss eine Zeile mit "-" gemacht worden. Leider nicht in allen Datensätze und leider auch nicht immer gleichlang.
    Beispiel:
    Bezeichnung.................Artikel
    Abmessungen................1 x 1 x 1
    -------------------------------------------​
    Diese letzte Zeile würde ich gerne überall löschen, aber leider weiß ich nicht wie... Könnt Ihr mir da helfen?

    Lieben Gruß Lafi
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Unter PostgreSQL gibt es rtrim:

    Code:
    test=*# select E'123\nneue Zeile\n-------------';
      ?column?
    ---------------
     123  +
     neue Zeile  +
     -------------
    (1 row)
    
    test=*# select rtrim(E'123\nneue Zeile\n-------------','-');
      rtrim
    ------------
     123  +
     neue Zeile+
    
    (1 row)
    
    Falls das Newline noch stört:

    Code:
    test=*# select rtrim(rtrim(E'123\nneue Zeile\n-------------','-'),E'\n');
      rtrim
    ------------
     123  +
     neue Zeile
    (1 row)
    
    
     
  3. Lafi2004

    Lafi2004 Benutzer

    leider geht das nicht in MS SQL...
     
  4. akretschmer

    akretschmer Datenbank-Guru

    rtrim gibt es da nicht? Evtl. ohne das E vor dem String, das ist nur wegen dem \n nötig, dafür dann evtl. \\n nehmen oder so.
     
  5. Lafi2004

    Lafi2004 Benutzer

    da war ich zu schnell :( trim(trailing,.. gibts da nicht.
    wie genau wäre denn da mein sql?

    select rtrim(rtrim(E '???,'-'),E'\n')
    from note
    where note.relate_key='86.28.078*'
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Statt der ??? halt den Spaltennamen, um den es geht.
     
  7. Lafi2004

    Lafi2004 Benutzer

    select rtrim(rtrim(E note.note,'-'),E'\n')
    from note
    where note.relate_key='86.28.078*'

    SQL Fehler (102): Falsche Syntax in der Nähe von 'note'.

    EDIT: Ich habe nur mit HeidiSQL zugriff auf die Datenbank!
    Falls das wichtig ist...
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Der Client ist eigentlich egal. Ich kenne HeidiSQL eher als MySQL-Client, egal.

    Code:
    test=*# select * from note ;
      note
    -------------------------------------
     das ist  +
     eine weitere Zeile  +
     -----------------------------------
    (1 row)
    
    test=*# select *, rtrim(rtrim(note, '-'),E'\n') from note ;
      note  |  rtrim
    -------------------------------------+--------------------
     das ist  +| das ist  +
     eine weitere Zeile  +| eine weitere Zeile
     ----------------------------------- |
    (1 row)
    
    Mach mal nur den Spaltennamen, nicht tabelle.spalte.
     
  9. Lafi2004

    Lafi2004 Benutzer

    geht leider nicht... was ist denn mit dem "E" bei "rtrim(rtrim(note..." ohne das "E" kommt:

    SQL Fehler (174): Die rtrim-Funktion erfordert 1 Argument(e).

    Edit: jetzt bin ich im MySQL Bereich!?! ich benutze zwar HeidiSQL aber die Datenbank ist eine MS SQL
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Das E ist eine Spezialität von PostgreSQL. Wenn die Variable standard_conforming_strings auf on ist, kann man innerhalb von Strings einfacher mit machen Steuerzeichen wie \n etc. umgehen. Demo:

    Code:
    test=*# select *, rtrim(rtrim(note, '-'),'\n') from note ;
      note  |  rtrim
    -------------------------------------+--------------------
     das ist  +| das ist  +
     eine weitere Zeile  +| eine weitere Zeile+
     ----------------------------------- |
    (1 row)
    
    test=*# -- hier wird jetzt das \n nicht als Zeilentrenner gewertet. Dazu das E vor dem String
    test=*# select *, rtrim(rtrim(note, '-'),E'\n') from note ;
      note  |  rtrim
    -------------------------------------+--------------------
     das ist  +| das ist  +
     eine weitere Zeile  +| eine weitere Zeile
     ----------------------------------- |
    (1 row)
    
    test=*# -- nun schalte ich das auf off
    test=*# set standard_conforming_strings to off;
    SET
    test=*# select *, rtrim(rtrim(note, '-'),'\n') from note ;
    WARNING:  nonstandard use of escape in a string literal at character 34
    HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
    WARNING:  nonstandard use of escape in a string literal
    LINE 1: select *, rtrim(rtrim(note, '-'),'\n') from note ;
      ^
    HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
      note  |  rtrim
    -------------------------------------+--------------------
     das ist  +| das ist  +
     eine weitere Zeile  +| eine weitere Zeile
     ----------------------------------- |
    (1 row)
    
    

    Das Du ins falsche Forum geschoben wurdes habe ich dem Admin schon mitgeteilt. War wohl ein Irrtum, an dem ich nicht ganz unschuldig bin, sorry.
     
  11. Lafi2004

    Lafi2004 Benutzer

    gibts da nichts einfacheres? beim MySQL würde das Trim(trailing,....) reichen :( ich komm irgendwie nicht weiter :(
     
  12. akretschmer

    akretschmer Datenbank-Guru

    Laut https://msdn.microsoft.com/en-us/library/ms178660.aspx geht es ab SQL Server 2008.
     
  13. Lafi2004

    Lafi2004 Benutzer

    ja aber scheinbar nur für leerzeichen...
     
  14. akretschmer

    akretschmer Datenbank-Guru

    Hm. Stimmt.

    Nun ja, kann ja nicht alles so cool sein wie PostgreSQL, gell? ;-)

    Keine Idee mehr. Irgend etwas selber basteln, man kann doch selber Stored Procs definieren, oder? Vielleicht mal via Google suchen, um das Rad nicht neu erfinden zu müssen.
     
  15. Lafi2004

    Lafi2004 Benutzer

    naja, google hab ich jetzt 2 tage mit meinem Problem gequält :) aber irgendwie hab ich es nicht verstanden, oder es ging darum eine feste anzahl an Zeichen zu löschen...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden