SQL-запрос для возврата каретки в строке и, в конечном итоге, удаления возврата каретки

SQL-запрос для возврата каретки в строке и, в конечном итоге, удаления возврата каретки

У меня есть некоторые данные в таблице, и в тех местах, где я неЯ не хочу их. Я пытаюсь написать запрос, чтобы получить все строки, содержащие возврат каретки.

Я пробовал это

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

Также'

select * from Parameters
where Name LIKE '\r'

Оба являются действительными SQL, но не возвращают то, что я ищу. Нужно ли использоватьподобно команда или другая команда? Как получить возврат каретки в запрос?

Возврат каретки также не обязательно находится в конце строки (может быть в середине).

 KM.26 авг. 2009 г., 22:23
это было для сервера sql?

Ответы на вопрос(8)

Главным вопросом было убрать CR / LF. Использование функций replace и char работает для меня:

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

Для Postgres или Oracle SQL используйте функцию CHR:

       replace(replace(Name,CHR(10),''),CHR(13),'')
 Daniel Horvath10 янв. 2019 г., 16:36
Этот выбор просто покажет таблицу без возврата каретки и перевода строки, но как ее можно навсегда удалить из исходной таблицы?
Решение Вопроса

это будет медленно, но если это разовая вещь, попробуйте ...

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

Обратите внимание, что оператор конкатенации строк ANSI SQL имеет вид "||»так что, возможно, должно быть:

select * from parameters where name like '%' || char(13) || '%' or name like '%' || char(10) || '%'
 Don Cheadle02 июл. 2015 г., 17:53
мы никогда не видели|| используется в строке SQL вместоOR, Когда это вызывает беспокойство?
 Clint Pachl20 нояб. 2014 г., 06:41
Postgresql использует имя функцииchr вместо .I 'char
 KM.22 февр. 2017 г., 14:38
@jipipayo, я нене нравится, когда люди редактируют мои ответы, как это.
 KM.06 июл. 2015 г., 16:56
@mmcrae, если вы посмотрите на историю редактирования, вы 'посмотрим чтоANSI SQL " раздел был добавлен в мой ответ. Я'мы никогда не использовали|| в любом из SQL, который ямы сделали. Я никогда не зацикливаюсь на эквивалентах ANSI SQL. Я просто код для текущей базы данных и покончим с этим. По моему опыту, вы никогда не будете переходить от одного поставщика базы данных к другому. Каждый поставщик добавил много дополнительных команд или вариантов SQL за пределы и / или вместо стандартов ANSI, что делает практически невозможным кодирование чего-либо сложного и 100% совместимость с ANSI.
 jacktrade23 февр. 2017 г., 10:12
@KM. я не редактировал ваш ответ, это был Кевин Панко, я только что сослался на mmcrae. комментарий выше.
 jacktrade22 февр. 2017 г., 09:49
|| это не ИЛИ. В postgresql есть конкатенация.

В SQL Server я бы использовал:

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

Это будет искать обавозврат каретки а такжеперевод строки.

Если вы хотите найтивкладки тоже просто добавь:

OR CHARINDEX(CHAR(9), name)  0

Вы также можете использовать регулярные выражения:

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

Опустите двойные кавычки из вашего первого запроса.

... LIKE '%\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.n0 THEN 'TRUE' ELSE 'FALSE' END)
END
GO

Затем вы можете просто выполнить запрос, как этот:

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

Это тоже работает

SELECT TRANSLATE(STRING_WITH_NL_CR, CHAR(10) || CHAR(13), '  ') FROM DUAL;
 HLGEM08 янв. 2015 г., 20:54
Это синтаксис Oracle?

Нечто подобное работает для меня:

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

Ваш ответ на вопрос