1

我正在为一个没有正确清理他们的一些表单数据的客户开发一个网站。特别是,他们没有做任何事情来解释从 textareas 收到的换行符。因此,在数百个 db 行中有\r\nand\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(). 由于某种原因,它不能处理表中的原始数据。现在,我很高兴能够拉出这些行并清理它们。

提前致谢!

乔什

4

3 回答 3

1

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

使用 PHP 编写一个简单的脚本,返回所有行(或一次 20 行)并使用 php 正则表达式来查找您所需要的行。然后对数据做任何你想做的事情并更新数据库。SQL 不够复杂,无法做你想做的事,用 PHP 做起来要容易得多。

于 2012-08-23T23:02:32.943 回答
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 ) 表示一个特殊的字节值

于 2019-03-28T17:53:55.147 回答
0
[Description] LIKE '%'+CHAR(10)+'%'
于 2021-01-21T07:45:26.927 回答