簡體   English   中英

從文本字段中查找 substring 的出現次數

[英]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()不適用於textREPLACE()也不能。

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.

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