好像是Oracle 10g以上才有SQL支援Regex的語法,SQL本身就是宿主語言,Regex又寄宿在SQL上,真是宿主的宿主。

  假設Student Table的學號(STD_NO)有:1001~1100,有個Property有key_name和value_context兩個欄位,是key-value值,其中一筆:key_name值為Black,value_context值為1002,1009,1099。如何以一行SQL,把Student table濾掉Black所指定的以逗號分割的學號。

Select A.* from Student A, Property B where B.key_name='Black' and Not REGEXP_LIKE (A.STD_NO, replace(B.value_context, ',', '|'))

  也就是先用replace函數把逗號(,)換成中線(|)符合Regexp_Like進行Regex比對,因是Not Regexp_Like,所以學號(STD_NO)符合在value_context裡都不會被Select出來。

P.S: 原來 Oracle 10g 開始就有提供 Regular Expression 了. 目前提供了 4 個 function, 分別是 REGEXP_LIKE, REGEXP_INSTR, REGEXP_SUBSTR 和 REGEXP_REPLACE, 相對於以前的 LIKE, INSTR, SUBSTR 以及 REPLACE

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()