簡體   English   中英

使用SQL進行模式匹配

[英]Pattern Matching Using SQL

我需要使用SQL來匹配下面提到的模式。

  1. “* 謝謝”
  2. “ *音樂*”
  3. “我喜歡音樂”
  4. “我喜歡*音樂和*繪畫”

輸入字符串看起來像這樣,
“嗨,謝謝”->應該與“ *謝謝”匹配
“我非常喜歡音樂”->應匹配“ *音樂*”

有沒有辦法使用標准SQL語法來做到這一點。

請幫忙。

謝謝。

Oracle MySQL示例查詢:

不區分大小寫:

select * from database where column like '%THANK YOU%';

區分大小寫:

select * from database where column LIKE BINARY '%THANK YOU%';

不區分大小寫:

select * from database where column REGEXP 'THANK YOU';

Oracle查詢:

select * from database WHERE REGEXP_LIKE(column, 'THANK YOU', 'i')

您可以在Oracle中使用LIKE,但是不區分大小寫的設置取決於版本。

區分大小寫:

select * from database WHERE column LIKE 'THANK YOU';

關於使Oracle的大小寫不敏感,有很多討論。 為此,使用reg_exp版本更容易,並設置i標志以區分大小寫。

更新最初的問題實際上與我的第一個答案相反,並且確實使我對我為數據挖掘而構建的許多應用程序打開了頭腦。 昨晚實際上有這個想法,但是原始海報在我之前就發布了(Fiddle失敗了)。 您可以使Regex與MySQL中REGEXP函數的兩側匹配。 因此,如果將表達式列表存儲到數據庫中,則實際上可以將表達式列表與條目表或單個字符串進行比較。

我在這里添加了SQL Fiddle: http ://sqlfiddle.com/#!8 / 701a0 / 2

請注意 ,在原始示例中,數據庫中的“ regex”值僅以星號開頭。 在Regex中,對於任何字符,實際字符串都必須為。*。

我添加了一些示例來匹配網站,美國免費電話和gmail帳戶。

INSERT INTO `myRegex` VALUES (1,'.* THANK YOU$'),(2,'MUSIC'),(3,'I LIKE .* MUSIC'),(4,'I LIKE .* MUSIC AND .* PAINTING'),(5,'^[0-9]?[ .-]?(800|866)'),(6,'\\.com$'),(7,'\\.net$'),(8,'\\.(gmail|googlemail)\\.'),(9,'THANK YOU');

產量

select * from myRegex where 'HI THANK YOU' REGEXP reg_expr;

在此處輸入圖片說明

select * from myRegex where 'THANK YOU MUCH' REGEXP reg_expr;

在此處輸入圖片說明

我找到了一種使用MySQL的方法,

選擇*從知識中“嗨,謝謝” REGEXP pattern_col;

pattern_col保存正則表達式。

暫無
暫無

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

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