2009-08-26 17 views
41

SQL-Abfrage für einen Zeilenumbruch in einem String und schließlich Entfernen WagenrücklaufSQL-Abfrage für einen Zeilenumbruch in einem String und schließlich Entfernen Wagenrücklauf

Ich habe einige Daten in einer Tabelle und es gibt einige Zeilenumbrüche in Orten wo ich sie nicht haben will. Ich versuche, eine Abfrage zu schreiben, um alle Zeichenfolgen zu erhalten, die Wagenrücklauf enthalten.

ich versucht, dieses

select * from Parameters 
where Name LIKE '%"\n" %' 

Auch

select * from Parameters 
where Name LIKE '\r' 

'

Beide gültige SQL sind aber kehren nicht das, was ich suche. Muss ich den Befehl wie oder einen anderen Befehl verwenden? Wie bekomme ich den Wagenrücklauf in die Abfrage?

Der Wagenrücklauf befindet sich nicht unbedingt am Ende der Zeile (möglicherweise in der Mitte).

+0

war dies für SQL Server? –

Antwort

53

diese langsam sein, aber wenn es eine einmalige Sache ist, versuchen ...

select * from parameters where name like '%'+char(13)+'%' or name like '%'+char(10)+'%' 

Beachten Sie, dass der ANSI SQL-String-Verkettung Operator "||", so kann es sein muß:

select * from parameters where name like '%' || char(13) || '%' or name like '%' || char(10) || '%' 
+2

Postgresql verwendet den Funktionsnamen 'chr' anstelle von' char'. –

+0

Vielen Dank! – PeteFoulkes

+0

Ich habe nie '||' in einer SQL-Zeichenfolge anstelle von 'OR' verwendet. Wann ist das ein Problem? – mmcrae

0

Die doppelten Anführungszeichen aus der ersten Abfrage auslassen.

... LIKE '%\n%' 
0

Etwas Ähnliches scheint für mich zu arbeiten:

SELECT * FROM Parameters WHERE Name LIKE '%\n%' 
3

Sie können auch reguläre Ausdrücke verwenden:

SELECT * FROM Parameters WHERE Name REGEXP '\n'; 
5

In SQL Server ich würde

where charindex(char(13), name)<>0 
49

Die wichtigste Frage, die CR/LF zu entfernen war. Mit Hilfe der ersetzen und char Funktionen funktioniert für mich:

Select replace(replace(Name,char(10),''),char(13),'') 

Für Postgres oder Oracle SQL, verwenden Sie die Funktion CHR statt:

 replace(replace(Name,CHR(10),''),CHR(13),'') 
0

Dies funktioniert auch

SELECT TRANSLATE(STRING_WITH_NL_CR, CHAR(10) || CHAR(13), ' ') FROM DUAL; 
+1

Dies ist die Oracle-Syntax? – HLGEM

1

dies funktioniert: Wählen Sie * aus der Tabelle aus, wobei Spalte wie '% (drücken Sie Enter)'

Ignorieren Sie die Klammern und drücken Sie die Eingabetaste, um eine neue Zeile einzugeben.