2014-12-29 32 views
0

我有表如何在Oracle中定義默認轉義字符?

id name 
__________ 
1 name1 
2 name2 
3 _name3 

,我想選擇所有的名字,即以「_」字符。

SELECT name FROM table1 WHERE name like '_%' 

但是這個查詢返回表中的所有行。也許任何人都知道這個問題的一些解決方案(不使用ESCAPE關鍵字)?或者,有沒有機會在Oracle中設置默認轉義字符?

+1

?設置默認(如果可能)可能會在其他地方產生不希望的結果。使用帶字符串操作的工作環境可能會導致性能下降。另外它取決於你想要達到的目標,也許它更好地清理一次數據,並且使用約束來拒絕在數據中使用'_'。 – evilive

回答

1

我想選擇所有以'_'開頭的名字。

使用SUBSTR

SQL> WITH DATA AS(
    2 SELECT 1 ID, 'name1' NAME FROM dual UNION ALL 
    3 SELECT 2, 'name2' FROM dual UNION ALL 
    4 SELECT 3 , '_name3' FROM dual 
    5 ) 
    6 SELECT * FROM DATA 
    7 WHERE substr(NAME, 1, 1) = '_' 
    8/

     ID NAME 
---------- ------ 
     3 _name3 

SQL> 
3

顯然,you cannot

char1 [ NOT ] { LIKE | LIKEC | LIKE2 | LIKE4 } 
    char2 [ ESCAPE esc_char ] 

[...]
如果esc_char沒有指定,那麼沒有默認轉義字符 。爲什麼不使用ESCAPE關鍵字

1

試試這個..

select * from table1 where regexp_like (name,'^_') ;