consulta SQL para un retorno de carro en una cadena y la eliminación definitiva de retorno de carro

StackOverflow https://stackoverflow.com/questions/1337196

Pregunta

consulta SQL para un retorno de carro en una cadena y en última instancia, la eliminación de retorno de carro

Tengo algunos datos en una tabla y hay algunos retornos de carro en lugares en los que no los quieren. Estoy tratando de escribir una consulta para obtener todas las cadenas que contienen retornos de carro.

He intentado esto

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

también

select * from Parameters
where Name LIKE '\r'

'

Ambos son SQL válida, pero no están regresando a lo que yo estoy buscando. ¿Es necesario utilizar el como comando o un comando diferente? ¿Cómo consigo el retorno de carro en la consulta?

El retorno de carro no es necesariamente en el extremo de la línea, ya sea (puede ser en el medio).

¿Fue útil?

Solución

Este será lento, pero si es una cosa de tiempo, tratar ...

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

Tenga en cuenta que el operador de concatenación de cadenas ANSI SQL es "||", por lo que puede necesitar ser:

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

Otros consejos

La cuestión principal era eliminar el CR / LF. El uso de las funciones reemplazar y Char funciona para mí:

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

Para Postgres SQL u Oracle, utilice la función CHR lugar:

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

En SQL Server Me gustaría utilizar:

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

Esto buscará tanto para retornos de carro y avances de línea .

Si desea buscar pestañas también acaba de añadir:

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

También puede utilizar expresiones regulares:

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

esto funciona: seleccionar * de la tabla donde la columna como '% (pulsa enter)%'

No haga caso de los soportes y pulsa enter para introducir nueva línea.

Puede crear una función:

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

A continuación, se puede ejecutar una consulta sencilla como esto:

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

Omita las comillas dobles desde su primera consulta.

... LIKE '%\n%' 

Esto también funciona

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

Algo como esto parece funcionar para mí:

SELECT * FROM Parameters WHERE Name LIKE '%\n%'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top