[英]Find number of occurrences of substring from a text field
我有一個不幸地使用一些Text
數據類型字段的數據庫。 我需要找到某個 substring 的出現次數。
以下代碼可以很好地從varchar
字段中查找匹配項,但在text
的許多步驟中都失敗了:
SELECT
KEY_FIELD,
LEN(FIELD) - LEN(REPLACE(FIELD, 'findMe', ''))
FROM
TABLE
WHERE
FIELD LIKE '%findMe%';
LEN()
不適用於text
, REPLACE()
也不能。
DATALENGTH()
不適用於此目的,因為它正在計算字節數並且不返回字符串出現次數的真實表示。
我已經嘗試了我能想到的CAST()
和CONVERT()
的所有組合,其中一些無法執行,而另一些則執行但返回狂野的數字,例如 67,我期望為 1。
是否有可能為Text
字段執行此操作?
我的“最佳”嘗試:
SELECT
NAME,
TEXT_FIELD,
LEN(CONVERT(VARCHAR(max), TEXT_FIELD)) - LEN(REPLACE(CONVERT(VARCHAR(max), TEXT_FIELD), 'view', ''))
FROM
TESTING
WHERE
TEXT_FIELD LIKE '%view%';'
我為這個問題做了一個測試表來演示,上面的查詢返回:
NAME | TEXT_FIELD | COUNT
------|-----------------------------------------------------------------------------|------
NAME1 | There is a review in which we view the only views that a person could view. |16
NAME2 | Search me for the term view, it will also find review. |8
如果您想嘗試重現:
CREATE TABLE TESTING(
NAME varchar(50),
TEXT_FIELD TEXT
);
INSERT INTO TESTING VALUES('NAME1', 'There is a review in which we view the only views that a person could view.');
INSERT INTO TESTING VALUES('NAME2', 'Search me for the term view, it will also find review.');
將text
字段轉換為varchar(max)
將使函數工作,但對於 substring 的每個實例,它將返回 substring 的字符數,因此要獲得正確的數字,您需要除以 substring 的長度 (如果有人知道為什么這種行為是從轉換后的text
字段而不是varchar
發生的,我很想知道)
解決方案:
SELECT
KEY_FIELD,
TEXT_FIELD,
(LEN(CONVERT(VARCHAR(max), TEXT_FIELD)) - LEN(REPLACE(CONVERT(VARCHAR(max), TEXT_FIELD), 'substring', ''))) / LEN('substring') AS 'CountOfSubstring'
FROM
TABLE
WHERE
TEXT_FIELD LIKE '%substring%';'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.