我正在创建一个应用程序,在某些时候我需要从数据库中选择数据,但我不能为这种情况构建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)。
有什么建议吗? 感谢
答案 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:]]*');