如何在SQL SELECT LIKE语句中搜索\ r \ n?

问题描述 投票:1回答:2

我正在为一个没有正确清理其部分表单数据的客户的网站工作。特别是,他们没有做任何事情来解释从textareas收到的换行符。所以,在数百个db行中有\r\n\r\n\r\n以及\r\n\r\n\r\n ......你明白了。我需要以某种方式仅提取具有\r\n的行来清理数据。我不能为我的生活,建立一个选择这些行的查询!我意识到我必须以某种方式逃避斜线,但我没有成功。

我尝试过以下方法:

SELECT Id,Description FROM lakes WHERE Description LIKE '%\r\n%';
SELECT Id,Description FROM lakes WHERE Description LIKE '%\\r\\n%';
SELECT Id,Description FROM lakes WHERE Description LIKE '%\\\r\\\n%';
SELECT Id,Description FROM lakes WHERE Description LIKE '%\\\\r\\\\n%';

我当然可以继续添加斜杠,但我觉得如果4个斜杠没有做到这一点,我可能会遗漏一些重要的东西。

这些查询中的每一个都返回结果,但结果中没有一个是\r\n中的结果。最后一个查询(带有4个斜杠)确实返回了2行,它们确实有\r\n,还有138行没有。

此外,因为我知道有人会提到它,我知道nl2br()。由于某种原因,它不使用表中的原始数据。现在,我很高兴能够拉出这些行并清理它们。

提前致谢!

玩笑

php mysql select line-breaks
2个回答
1
投票

这是SQL真正不擅长的一个例子。

使用PHP编写一个返回所有行(或一次20行)的简单脚本,并使用php正则表达式查找您所追求的行。然后对数据执行任何操作并更新数据库。 SQL不够复杂,无法做到你想要的,在PHP中更容易做。


0
投票

在Postgresql中你可以使用:

SELECT Id,Description FROM lakes WHERE Description LIKE E'%\r\n%';

https://www.postgresql.org/docs/current/sql-syntax-lexical.html

PostgreSQL还接受“转义”字符串常量,它是SQL标准的扩展。通过在开始单引号之前写入字母E(大写或小写)来指定转义字符串常量,例如E'foo'。 (当在行之间继续转义字符串常量时,仅在第一个开始引号之前写入E.)在转义字符串中,反斜杠字符()开始一个类似C的反斜杠转义序列,其中反斜杠和后续字符的组合(s )表示特殊的字节值

© www.soinside.com 2019 - 2024. All rights reserved.