2017-03-19 53 views
0

我需要輸出不以元音開頭和結尾的名稱。我試過這樣:SQL中的NOT LIKE IN語句

SELECT DISTINCT name FROM people WHERE 
lower(name) NOT LIKE IN ('a','e','i','o','u')%('a','e','i','o','u'); 

我得到了錯誤。

+0

看看http://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql – CollinD

回答

1

您可以使用regexp_like與之相匹配的參數i不區分大小寫的匹配:

select distinct name from people 
where not regexp_like(name, '^[aeiou]($|.*[aeiou]$)', 'i'); 

模式的細節:

  • ^[aeiou] - 開始以元音
  • ($|.*[aeiou]$) - 無論是隻有一個字符(在第一步中匹配)或以元音結尾。
1

您可能想要嘗試避免使用REGEXP在大數據集情況下的性能原因。

在這種情況下是TRANSLATE你的朋友。

1)所有的元音轉換成一個代表

2)與所選擇的元音

select txt from tab1 
where translate(lower(txt),'aeiou','aaaaa') not like 'a%a'; 

REGEXP s爲強大的執行正常LIKE謂詞,但不應在非平凡的數據使用的以防萬一他們可以避免。 (我的8M行測試數據給出了使用TRANSLATE所花費的7秒與使用REGEXP的2分鐘所花費的時間)。