[英]Pattern Matching Using SQL
我需要使用SQL來匹配下面提到的模式。
輸入字符串看起來像這樣,
“嗨,謝謝”->應該與“ *謝謝”匹配
“我非常喜歡音樂”->應匹配“ *音樂*”
有沒有辦法使用標准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.