Oracle varchar不等于语句

时间:2015-12-16 17:09:06

标签: sql database oracle

我正在创建一个应用程序,在某些时候我需要从数据库中选择数据,但我不能为这种情况构建SQL。

column1         | column2 | column3
tom .......     | xxx     | xxx
tom_sp1         | xxx     | xxx
tom_sp2         | xxx     | xxx
kim  ........   | xxx     | xxx
tommy   ..      | xxx     | xxx
bruce ....      | xxx     | xxx
bruce_sp1       | xxx     | xxx

不是我所知道的最好的桌子(:

所以我需要创建不应该显示'_sp(number)'行的SQL,因此输出应该只显示tom,kim,tommy和bruce(不是tom_sp1,tom_sp2和bruce_sp1)。

有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:4)

这取决于你需要的确切程度。

如果要排除column1 结束的行,其中字符串“_sp”后跟任意长度的数字,那么就可以这样做:

select * from my_table where not regexp_like(name,'\_sp[0-9]+$')

答案 1 :(得分:0)

阅读Oracle中的正则表达式。尝试类似:

创建表人员       (column1 VARCHAR2(1000));

INSERT INTO persons (column1) VALUES ('tom');
INSERT INTO persons (column1) VALUES ('tom_sp1');
INSERT INTO persons (column1) VALUES ('tom_sp2');
INSERT INTO persons (column1) VALUES ('kim');
INSERT INTO persons (column1) VALUES ('bruce');
INSERT INTO persons (column1) VALUES ('bruce_sp12');
INSERT INTO persons (column1) VALUES ('bruce_sp12ss');
COMMIT;

SELECT *
  FROM persons
 WHERE NOT REGEXP_LIKE(column1, '_sp[[:digit:]]*');