【问题标题】:How can i search for \r\n in an SQL SELECT LIKE statement?如何在 SQL SELECT LIKE 语句中搜索 \r\n?
【发布时间】:2012-08-19 12:46:05
【问题描述】:

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

提前致谢!

乔什

【问题讨论】:

  • 也许我遗漏了一些明显的东西,但话说回来,第一个查询有什么问题?这些是没有\r\n 序列的行吗?

标签: php mysql select line-breaks


【解决方案1】:

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

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

【讨论】:

  • 这是有道理的。我可以在 PHP 外部处理它。你知道为什么 nl2br() 函数不能处理数据库中的原始数据吗?
  • 我认为发生了一些有趣的事情,因为我看不出 nl2br 不起作用的任何原因。
  • 如果有额外的 \\ 那么它不是一个 \r\n 它是一个不同的 \\r\\n :)
  • 在数据库中,它们都是\r\n,没有多余的斜线......奇怪的是,我可以在空白页上做一个简单的拉动,也不能让它工作。哦,好吧,这可能属于一个单独的问题。感谢您的帮助!
【解决方案2】:

在 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 的反斜杠 转义序列,其中反斜杠和后面的组合 字符代表一个特殊的字节值

【讨论】:

    【解决方案3】:
    [Description] LIKE '%'+CHAR(10)+'%'
    

    【讨论】:

    • 欢迎来到 SO。虽然这段代码可能是解决手头问题的方法,但建议您为其添加一些上下文,至少是一个简短的解释。
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 2013-08-31
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2023-04-02
    • 2021-01-28
    相关资源
    最近更新 更多