如何在Oracle中定义默认转义字符?

如何在Oracle中定义默认转义字符?,oracle,escaping,Oracle,Escaping,我有一张桌子 id name __________ 1 name1 2 name2 3 _name3 我想选择所有的名字,都以“u”字符开头 SELECT name FROM table1 WHERE name like '_%' 但此查询返回表中的所有行。也许有人知道这个问题的一些解决方案(不使用ESCAPE关键字)?或者,是否有机会在Oracle中设置默认转义字符 我想选择所有名称,以“u”字符开头 SELECT name FROM table1 WHERE name li

我有一张桌子

id  name
__________
1   name1
2   name2
3   _name3
我想选择所有的名字,都以“u”字符开头

SELECT name FROM table1 WHERE name like '_%'
但此查询返回表中的所有行。也许有人知道这个问题的一些解决方案(不使用ESCAPE关键字)?或者,是否有机会在Oracle中设置默认转义字符

我想选择所有名称,以“u”字符开头

SELECT name FROM table1 WHERE name like '_%'
使用
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>
我想选择所有名称,以“u”字符开头

SELECT name FROM table1 WHERE name like '_%'
使用
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>
显然,:

[…]
如果未指定
esc_char
,则没有默认转义 字符

显然,:

[…]
如果未指定
esc_char
,则没有默认转义 字符

试试这个

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

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

为什么不使用ESCAPE关键字呢?设置默认值(如果可能)可能会在其他位置产生不需要的结果。将work Arounds与字符串操作一起使用可能会导致性能不佳。另外,这取决于您想要实现的目标,也许最好清理一次数据,并使用约束拒绝在数据中使用“u”。为什么不使用ESCAPE关键字?设置默认值(如果可能)可能会在其他位置产生不需要的结果。将work Arounds与字符串操作一起使用可能会导致性能不佳。另外,这取决于您想要实现什么,也许最好清理一次数据,并使用约束拒绝在数据中使用“u”。