SQL-запрос для возврата каретки в строку и, в конечном счете, удаление возврата каретки
SQL-запрос для возврата каретки в строку и, в конечном счете, удаление возврата каретки
У меня есть некоторые данные в таблице, и есть некоторые возвращения каретки в местах, где я их не хочу. Я пытаюсь написать запрос, чтобы получить все строки, которые содержат возврат каретки.
Я пробовал это
select * from Parameters
where Name LIKE '%"\n" %'
Кроме
select * from Parameters
where Name LIKE '\r'
Оба являются действительными SQL, но не возвращают то, что я ищу. Нужно ли использовать команду Like или другую команду? Как получить возврат каретки в запрос?
Возврат каретки не обязательно находится в конце строки (может быть посередине).
Ответы
Ответ 1
это будет медленным, но если это одно время, попробуйте...
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) || '%'
Ответ 2
Основной вопрос заключался в том, чтобы удалить CR/LF. Использование функций replace и char работает для меня:
Select replace(replace(Name,char(10),''),char(13),'')
Для Postgres или Oracle SQL вместо этого используйте функцию CHR:
replace(replace(Name,CHR(10),''),CHR(13),'')
Ответ 3
В SQL Server я бы использовал
where charindex(char(13), name)<>0
Ответ 4
Вы также можете использовать регулярные выражения:
SELECT * FROM Parameters WHERE Name REGEXP '\n';
Ответ 5
Это работает:
выберите * из таблицы, где столбец типа '% (нажмите enter)%'
Игнорируйте скобки и нажмите enter, чтобы ввести новую строку.
Ответ 6
Оставьте двойные кавычки из вашего первого запроса.
... LIKE '%\n%'
Ответ 7
Мне кажется, что-то вроде этого работает:
SELECT * FROM Parameters WHERE Name LIKE '%\n%'
Ответ 8
Это также работает
SELECT TRANSLATE(STRING_WITH_NL_CR, CHAR(10) || CHAR(13), ' ') FROM DUAL;