2016-01-19 80 views
0

在下面的sql中,escape的用法是什麼?在select語句中轉義

select * from dual where dummy like 'funny&_' escape '&'; 

SQL * Plus詢問_的值是否指定了轉義。

+1

我覺得文檔解釋了這個非常好:https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions016.htm。 –

+0

請提供您正在嘗試獲取的示例數據。 –

回答

2

轉義字符用於表示下劃線應該匹配爲實際字符,而不是單字符通配符。 This is explained in the documentation

like condition

可以通過使用ESCAPE子句,其識別轉義字符包括在所述圖案的實際字符%或_。如果轉義字符在模式中的字符%或_之前,那麼Oracle將在該模式中逐字地解釋該字符,而不是作爲特殊的模式匹配字符。

如果你沒有足夠的例外條款,則下劃線將匹配任何單個字符,所以where dummy like 'funny_'將匹配'funnyA''funnyB'等,不只是實際的下劃線。

您選擇的轉義字符是&,這是默認的SQL * Plus客戶端substitution variable標記。它與escape子句無關,並且使用該子句導致模式的&_部分被解釋爲名爲_的替代變量,因此會提示您。由於它不相關,所以escape子句對此沒有影響。

最簡單的事情可能是選擇一個不同的轉義字符。如果要使用特定的轉義字符,而不是提示,disable or change the substitution character

set define off 
select * from dual where dummy like 'funny&_' escape '&'; 
set define on 

那麼就會在那裏假正好包含字符串匹配'funny_'行。 (因此它相當於where dummy = 'funny_',因爲沒有未轉義的通配符,因此like模式匹配冗餘)。它不會匹配任何開始與該模式(這有點像使用regexp_like與開始和結束錨點,你可能會期望它的工作,如果你沒有提供錨點,但它不)。您將需要添加一個通配符%爲:

set define off 
select * from dual where dummy like 'funny&_%' escape '&'; 
set define on 

如果你想匹配任何不以funny_開始,但有它的地方在的中間值,則需要添加一個通配符之前太:

set define off 
select * from dual where dummy like '%funny&_%' escape '&'; 
set define on 

您還沒有表現出任何的樣本數據或預期結果,目前尚不清楚你需要的模式。

SQL小提琴沒有替換變量,但是here's an example顯示了這三個模式如何匹配各種值。

+0

是否有一個示例,其中有一行來自select而不是「未選擇行」?我嘗試了一些,只是得到了。 – user2018791

+0

@ user2018791 - 取決於您的數據。也許你想在'funny'之前使用%通配符,如果它出現在值的中間?但是,如果你真的在查詢'dual',那麼你就永遠不會匹配,因爲它有一個'dummy'值爲'X'的單行。 –

3

escape子句的用途是停止通配符(例如,從%_)被視爲通配符,按the documentation

爲什麼你會被提示輸入的_值的原因是因爲你使用&,這也是通常使用的字符提示輸入替換變量。

要停止後者情況發生,你可以:

  • 變化到不同的轉義字符
  • ,如果你使用SQL * Plus運行您的語句,運行set define off(或作爲腳本之前在GUI中,例如Toad)或關閉替換變量提示如果您使用GUI。
  • 變化通過運行set define <character>
1

爲SQL LIKE條件的語法定義字符不同的東西是:

expression LIKE pattern [ ESCAPE 'escape_character' ] 

參數或參數

  • expression:一個字符表達這樣作爲列或字段。
  • pattern:包含模式匹配的字符表達式。你可以選擇的模式是:

    Wildcard | Explanation 
    ---------+------------- 
        %  | Allows you to match any string of any length (including zero length) 
        _  | Allows you to match on a single character 
    
  • escape_character:可選。它允許您測試通配符的文字實例,如%或_。

來源:http://www.techonthenet.com/sql/like.php