不是100%是你所寻找的,但那种做它的由内而外的方式:
SQL> CREATE TABLE mytable (id NUMBER, status VARCHAR2(50));
Table created.
SQL> INSERT INTO mytable VALUES (1,'Finished except pouring water on witch');
1 row created.
SQL> INSERT INTO mytable VALUES (2,'Finished except clicking ruby-slipper heels');
1 row created.
SQL> INSERT INTO mytable VALUES (3,'You shall (not?) pass');
1 row created.
SQL> INSERT INTO mytable VALUES (4,'Done');
1 row created.
SQL> INSERT INTO mytable VALUES (5,'Done with it.');
1 row created.
SQL> INSERT INTO mytable VALUES (6,'In Progress');
1 row created.
SQL> INSERT INTO mytable VALUES (7,'In progress, OK?');
1 row created.
SQL> INSERT INTO mytable VALUES (8,'In Progress Check Back In Three Days'' Time');
1 row created.
SQL> SELECT *
2 FROM mytable m
3 WHERE +1 NOT IN (INSTR(m.status,'Done')
4 , INSTR(m.status,'Finished except')
5 , INSTR(m.status,'In Progress'));
ID STATUS
---------- --------------------------------------------------
3 You shall (not?) pass
7 In progress, OK?
SQL>
我试图避免漫长的路线,但它看起来像它可能是唯一的方法 – Matt 2012-03-02 20:53:15
@Matt如果这只是写了稍短的SQL文本,而不仅仅是使用本答案中提出的语法并学习它。如果这是关于LIKE来自另一个表的行(所以你不能事先构造值的列表),那么这完全是一个不同的问题,这需要类似这样的东西:'JOIN OTHER_TABLE ON NOT(YOUR_TABLE.FIELD就像OTHER_TABLE .FIELD)'...... – 2012-03-02 21:13:13
为了简单起见,我最终使用了这种方法,但正则表达式的答案对于学习新的Oracle有帮助。谢谢所有 – Matt 2012-03-06 16:54:25