Domanda

query SQL per un ritorno in una stringa e infine rimuovendo ritorno carrello

Ho alcuni dati in una tabella e ci sono alcuni ritorni a capo nei luoghi in cui io non li voglio. Sto cercando di scrivere una query per ottenere tutte le stringhe che contengono ritorni a capo.

Ho provato questo

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

Anche

select * from Parameters
where Name LIKE '\r'

'

Entrambi sono SQL valida, ma non stanno tornando quello che sto cercando. Ho bisogno di utilizzare il comando Come o un comando diverso? Come faccio ad avere il ritorno a capo nella query?

Il ritorno del carrello non è necessariamente alla fine della linea o (può essere nel mezzo).

È stato utile?

Soluzione

questo sarà lento, ma se si tratta di una cosa di una volta, provare ...

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

Si noti che l'ANSI SQL operatore di concatenazione di stringhe è "||", quindi potrebbe bisogno di essere:

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

Altri suggerimenti

La questione principale è stato quello di rimuovere il CR / LF. Utilizzando le funzioni di sostituire e char funziona per me:

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

Per Postgres o Oracle SQL, utilizzare la funzione CHR invece:

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

In SQL Server userei:

WHERE CHARINDEX(CHAR(13), name) <> 0 OR CHARINDEX(CHAR(10), name) <> 0

In questo modo la ricerca di entrambe le ritorni a capo e di riga .

Se si desidera effettuare la ricerca per schede troppo basta aggiungere:

OR CHARINDEX(CHAR(9), name) <> 0

È inoltre possibile utilizzare le espressioni regolari:

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

questo funziona: select * from tabella in cui colonna come '% (premi invio)%'

Ignora le staffe e premi invio per introdurre la nuova linea.

È possibile creare una funzione:

CREATE FUNCTION dbo.[Check_existance_of_carriage_return_line_feed]
(
      @String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
BEGIN
DECLARE @RETURN_BOOLEAN INT

;WITH N1 (n) AS (SELECT 1 UNION ALL SELECT 1),
N2 (n) AS (SELECT 1 FROM N1 AS X, N1 AS Y),
N3 (n) AS (SELECT 1 FROM N2 AS X, N2 AS Y),
N4 (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY X.n)
FROM N3 AS X, N3 AS Y)

SELECT @RETURN_BOOLEAN =COUNT(*)
FROM N4 Nums
WHERE Nums.n<=LEN(@String) AND ASCII(SUBSTRING(@String,Nums.n,1)) 
IN (13,10)    

RETURN (CASE WHEN @RETURN_BOOLEAN >0 THEN 'TRUE' ELSE 'FALSE' END)
END
GO

Quindi è possibile eseguire una query semplice come questo:

SELECT column_name, dbo.[Check_existance_of_carriage_return_line_feed] (column_name)
AS [Boolean]
FROM [table_name]

Omettere le virgolette dalla prima query.

... LIKE '%\n%' 

Questo funziona anche

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

Qualcosa di simile sembra funzionare per me:

SELECT * FROM Parameters WHERE Name LIKE '%\n%'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top