SQL只获取带有前导数字的字符串

时间:2012-05-24 15:41:38

标签: sql regex oracle

我认为这很简单。我只想返回与查询结果中的前导数字联系的字符串值。

例如:

003 - Preliminary Examination Plan  
005 - Coordination  
1000a - Balance sheet
Advertising  
Amortization  
Partnerships

想得到:

003 - Preliminary Examination Plan  
005 - Coordination  
1000a - Balance sheet

这段代码给了我零结果。如何检查前导数字是否包含数字并返回字符串的其余部分?

select distinct AIssue
from SQLIssue
where regexp_like( AIssue, '^[[:digit:]]*$' )
order by AIssue

3 个答案:

答案 0 :(得分:6)

您当前的正则表达式将字符串重新组成完全由数字组成。请尝试以下方法:

where regexp_like( AIssue, '^[[:digit:]].*$' )

(注意添加的点)。

详细说明,.匹配任何字符,*表示“重复上一个字词零次或更多次”。

因此,原始正则表达式表示“零或更多数字”,而上述正则表达式表示“数字后跟零或更多任何字符

编辑:@mellamokb在评论中提出了上述正则表达式的较短版本:

where regexp_like( AIssue, '^[[:digit:]]' )

答案 1 :(得分:1)

如果您使用的是SQL Server,请尝试以下操作:

select distinct Issue
 from SQLIssue
 where AIssue LIKE '[0-9]%'
 order by AIssue

请参阅LIKE

的文档

答案 2 :(得分:1)

另一种解决方案,但不涉及正则表达式:

select distinct Issue
from SQLIssue
where substr(AIssue, 1, 1) between '0' and '9'
order by AIssue