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

LF/CR in String suchen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von casi4711, 27 August 2020.

  1. casi4711

    casi4711 Benutzer

    Hallo liebe Leute,

    ich habe mal eine kleine Frage. In meiner Archiv Datenbank existiert ein Feld Ob_F2, welches eine alphanumerische Kennung ethält und vom Typ (NVARCHAR(255),NULL) ist. Leider kommt es bei der Dateneingabe immer mal wieder vor, dass am Anfang, am Ende oder innerhalb des Strings Leerzeichen hineingeraten.

    Hat jemand eine Idee, wie ich diese Datensäte finden kann, es geht nur um das finden, mein Grundkonstrukt für die Abfrage sieht folgendermaßen aus:

    Code:
    Use DBArchiv
    select Ob_F2,B_intAbk,B_DatVon,B_DatBis,Ob_F1, Ob_f20
    
    FROM M_Objekte1 INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID
    WHERE 
    ....
        
    ORDER BY B_intAbk
    Über Anregungen wäre ich sehr dankbar


    lg

    chris
     
  2. casi4711

    casi4711 Benutzer

    Also ich habe es zumindest erst mal teilweise gelöst, leider sind da noch nicht die datensäze berücksichtigt, in denen dazwischen Leezeichen sind

    Code:
    use DBArchiv
    
    select Ob_F2,B_intAbk,B_DatVon,B_DatBis,Ob_F1, Ob_f20,ob_f21
    
    FROM M_Objekte1 INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID
    
    WHERE (Ob_f2 like '[ ]%'
    AND
    Ob_f2 like '%[ ]')
    
    OR
    Ob_f2 like '[ ]%'
    
    OR
    Ob_f2 like '%[ ]'
    
    order by B_intAbk
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Naja, in PG ginge dies:

    Code:
    test=*# create table casi4711(id int, val text);
    CREATE TABLE
    test=*# insert into casi4711 values (1, 'abc');
    INSERT 0 1
    test=*# insert into casi4711 values (2, ' abc');
    INSERT 0 1
    test=*# insert into casi4711 values (3, 'abc ');
    INSERT 0 1
    test=*# insert into casi4711 values (4, ' abc ');
    INSERT 0 1
    test=*# select * from casi4711 where val != trim(both from val);
     id |  val  
    ----+-------
      2 |  abc
      3 | abc
      4 |  abc
    (3 rows)
    
    Oder, das findet auch Leerzeichen in der Mitte:

    Code:
    test=*# insert into casi4711 values (5, 'a b c');
    INSERT 0 1
    test=*# select * from casi4711 where val != replace(val,' ','');
     id |  val  
    ----+-------
      2 |  abc
      3 | abc
      4 |  abc
      5 | a b c
    (4 rows)
    
     
  4. casi4711

    casi4711 Benutzer

    ok Danke, aber leider muss ich ja hier auf Kleinweich SQL zurückgreifen, noch jemand ne Idee?


    lg
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Upgrade?
     
  6. casi4711

    casi4711 Benutzer

    wir haben den aktuellsten Server, MS SQL Server 2019, mit allen Updates
     
    Zuletzt bearbeitet: 28 August 2020
  7. Tommi

    Tommi Datenbank-Guru

    Hallo Chris,

    so wie ich das verstanden habe, sollen in der Kennung keinerlei Leerzeichen enthalten sein, oder?
    Wenn es darum geht, diese Datensätze zu finden, dann kann man das über CHARINDEX lösen. Ich habe im Beispiel auch mal einige Steuerzeichen berücksichtigt.

    Code:
    SELECT
    Ob_F2,
    B_intAbk,
    B_DatVon,
    B_DatBis,
    Ob_F1,
    Ob_f20,
    ob_f21
    FROM M_Objekte1
    INNER JOIN M_Bestaende
        ON M_Objekte1.B_ID = M_Bestaende.B_ID
    WHERE CHARINDEX(' ', Ob_F2) > 0            -- Leerzeichen
    OR CHARINDEX(CHAR(9), Ob_F2) > 0        -- TAB (Tabulator)
    OR CHARINDEX(CHAR(10), Ob_F2) > 0        -- LF (LineFeed)
    OR CHARINDEX(CHAR(13), Ob_F2) > 0        -- CR (Carriage Return)
    
    Mit
    Code:
    [...] REPLACE(REPLACE(REPLACE(REPLACE(Ob_F2, ' ', ''), CHAR(9), ''), CHAR(10), ''), CHAR(13), '') as Ob_F2 [...]
    kann man das Feld auch bereinigen.

    Viele Grüße,
    Tommi
     
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