Relational-Theory

有沒有辦法告訴在與 LIKE 匹配的數據庫值中找到的匹配數?

  • December 19, 2013

有什麼方法可以查詢 SQL-Server-CE 數據庫,該數據庫將使用 LIKE (或 MATCH AGAINST 或我不知道的任何其他方法,真的)返回在單元格值中找到的匹配數?

範例表,“exampleTable”:

**ObjectID**        **value**
    1           I Love Lemonade
    2             I Love Love

使用這樣的查詢: SELECT * FROM exampleTable WHERE value LIKE '%love%',我可以很容易地找到值包含單詞(或有一個單詞的一部分包含單詞)“love”的任何條目。我希望能夠知道在匹配欄位中找到了“多少”匹配項(為了搜尋優先級),以便它們可以顯示為更相關。我意識到我可能對一個簡單的查詢提出了很多要求,但是,我也知道 SQL 的強大功能,所以我想我會問這是否可能,如果沒有,是否還有其他方法我可能會採取(這不會強迫我重寫數據庫)。

我想以某種方式使用子查詢,但沒有辦法(我已經找到)結合“LIKE”和“IN”。此外,我什至不確定使用子查詢是否能完成工作,因為我正在使用一個關係數據庫,其中一個主表與其他 8 個表相關,而“其他 8 個”表具有我想要搜尋的值,但是主表有我需要的位置(雖然,我想我在這些“8 個其他”表中添加“位置”列沒有問題,因為它在其他區域也很有幫助)。

完全有可能我沒有將關係數據庫的“關係”部分設計得完美無缺,但這是我第一次自己設計(儘管肯定沒有使用過)關係數據庫,至少,它與我的網站後端配合得很好(是的,這個網站是一個私有的部分 CMS)。

任何幫助表示讚賞,並感謝您的時間!

您將字元串的長度與您正在搜尋的文本進行比較:

 select
       ObjectID
       ,value
       ,(len(value) - len(replace(value,'love',''))) / 4 as occurs
       from exampleTable
       where value like '%love%'

借助Numbers表格:

CREATE TABLE Numbers
 ( i INT NOT NULL PRIMARY KEY ) ;

INSERT INTO Numbers (i)
VALUES                                        -- fill the table up to 10
 (1), (2), ... (10) ; 

INSERT INTO Numbers (i)                       -- fill the table up to 100
SELECT m.maxi * a.i + b.i 
FROM                                       
   (SELECT MAX(i) AS maxi FROM Numbers) m    -- if you run this once more  
 CROSS JOIN Numbers a                        -- it will get up to 10000
 CROSS JOIN Numbers b
WHERE a.i < m.maxi ; 

你可以執行這個:

SELECT e.ObjectID, e.value, COUNT(*) AS matches
FROM exampleTable AS e 
 JOIN Numbers AS n
   ON  n.i <= LEN(e.value) + 1 - 4
   AND SUBSTRING(e.value, n.i, 4) = 'love' 
WHERE e.value LIKE '%love%' 
GROUP BY e.ObjectID, e.value ;

引用自:https://dba.stackexchange.com/questions/45382