2009-08-26 13 views
41

requête SQL pour un retour chariot dans une chaîne et, finalement, enlever retour chariotrequête SQL pour un retour chariot dans une chaîne et, finalement, enlever retour chariot

J'ai quelques données dans une table et il y a quelques retours chariot dans des endroits où je ne les veux pas. J'essaye d'écrire une requête pour obtenir toutes les chaînes qui contiennent des retours de chariot.

J'ai essayé

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

également

select * from Parameters 
where Name LIKE '\r' 

'

sont valides SQL mais ne remettons pas ce que je cherche. Dois-je utiliser la commande Like ou une commande différente? Comment puis-je obtenir le retour chariot dans la requête?

Le retour chariot n'est pas nécessairement à la fin de la ligne (peut être au milieu).

+0

était-ce pour le serveur sql? –

Répondre

53

ce sera lent, mais si elle est une chose une fois, essayer ...

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

Notez que l'opérateur de concaténation de chaîne SQL ANSI est "||", il doit donc être:

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

Postgresql utilise le nom de fonction 'chr' au lieu de' char'. –

+0

Merci beaucoup! – PeteFoulkes

+0

Je n'ai jamais vu '||' utilisé dans une chaîne SQL au lieu de 'OR'. Quand est-ce une préoccupation? – mmcrae

0

Omettez les guillemets de votre première requête.

... LIKE '%\n%' 
0

Quelque chose comme cela semble fonctionner pour moi:

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

Vous pouvez également utiliser des expressions régulières:

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

Dans SQL Server j'utiliser

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

La question principale était de retirer le CR/LF. En utilisant les remplacer et les fonctions ombles fonctionne pour moi:

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

Pour Postgres ou Oracle SQL, utilisez la fonction CHR à la place:

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

Cela fonctionne également

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

Ceci est la syntaxe Oracle? – HLGEM

1

cela fonctionne: sélectionnez * depuis la table où colonne comme '% (appuyez sur Entrée)%'

Ignorer le crochets et appuyez sur Entrée pour introduire une nouvelle ligne.