LF/CR in String suchen

casi4711

Benutzer
Beiträge
12
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
 
Werbung:
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
 
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)
 
Werbung:
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
 
Zurück
Oben