簡體   English   中英

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

[英]How can i search for \r\n in an SQL SELECT LIKE statement?

我正在為一個客戶的網站工作,他沒有正確地清理他們的一些表單數據。 特別是,他們沒有做任何處理從 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() 由於某種原因,它不適用於表中的原始數據。 現在,我很高興能夠拉出這些行並清理它們。

提前致謝!

喬希

這是 SQL 確實不擅長的一個例子。

使用 PHP 編寫一個簡單的腳本,返回所有行(或一次 20 行)並使用 php 正則表達式來查找您要查找的行。 然后對數據做任何你想做的事情並更新數據庫。 SQL 不夠復雜,無法執行您想要的操作,在 PHP 中執行要容易得多。

在 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 的反斜杠轉義序列,其中反斜杠和后續字符的組合) 表示一個特殊的字節值

[Description] LIKE '%'+CHAR(10)+'%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM