2017-06-28 30 views
0

我想从包含特定字符串的表中选择所有行,但之后还会返回通常为动态的后面的4个字符。Oracle从表格中选择特定的字符串加上以下字符

所以基本上我有一个表,看起来像这样

Column1 | Column2 

CSE-001 | jdaosfjodas 

CSE-002 | fjdaosfjdosj 

GDS-001 | dskfjaodij 

CSE-103 | fojdsiofj 

现在,我要选择与CSE以及一开始所有行“ - ”,将遵循与subsiquent三个数字,但这三个数字可以是任何东西。所以,根据上面的表格,我想要返回CSE-001,CSE-002和CSE-103。

对不起,如果这个问题是可怕的,我是相对较新的网站。 谢谢!

编辑

@GordonLinoff说几乎正是我想要的,但是关于什么情况column1在返回类似

Column1 | Column 2 
GDE-002, CSE-101, GDE-003 | faosfd 

在这种情况下,我会想返回特定行,但只有“ CSE-101“的一部分。

+1

为什么列上标有“Row1”和“Row 2”?这有点令人不安。 –

+0

我从标题中删除了PLSQL,这个问题与PL/SQL无关。 – mathguy

+0

如果Column1是'CSE-2002'会怎么样?您的要求,严格解释,是返回'CSE-200'。或者在我们的数据中是不可能的,破折号后总是有三位数字?它*正好*三位数字,还是可能会更少?如果是这样,那么期望的结果是什么? – mathguy

回答

1

这可以通过使用regexp_like完成。

对于不区分大小写的匹配使用,

select * from tbl 
where regexp_like(column1,'^CSE-[0-9]{3}$','i') 
--this query matches values like csE-101,CsE-001,cse-290 etc. 

如果您需要区分大小写的匹配,使用

select * from tbl 
where regexp_like(column1,'^CSE-[0-9]{3}$') 

编辑:基于OP的编辑发布上述答案后,

select * from tbl 
where regexp_like(column1,'(^|\s|,)CSE-[0-9]{3}(,|\s|$)') 
+0

非常感谢您的帮助! –

0

这听起来像你想是这样的:

select substr(col1, 1, 7), t.* 
from t 
where t.col1 like 'CSE-___%'; 
+0

感谢您的帮助!我编辑了我的帖子,希望能够让事情变得更清晰。 –

相关问题