SQL仅获取带有前导数字的字符串
Posted
技术标签:
【中文标题】SQL仅获取带有前导数字的字符串【英文标题】:SQL to get only string with leading numbers 【发布时间】:2012-05-24 15:41:37 【问题描述】:我认为这很简单。我只想返回查询结果中与前导数字联系的字符串值。
例如:
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
【问题讨论】:
您使用的是哪个数据库系统? SQL 服务器?如果是这样,版本号也可能会影响答案。 这实际上是一个相当少见的名为 Livelink 的数据库系统,它使用 oracle 后端但它使用标准 sql 进行查询。 【参考方案1】:您当前的正则表达式要求字符串完全由数字组成。请尝试以下操作:
where regexp_like( AIssue, '^[[:digit:]].*$' )
(注意添加的点)。
详细地说,.
匹配任何字符,*
表示“重复上一个词零次或多次”。
因此,原始正则表达式表示“零个或多个数字”,而上述正则表达式表示“一个数字后跟零个或多个任何字符。
编辑:@mellamokb 在 cmets 中建议了上述正则表达式的较短版本:
where regexp_like( AIssue, '^[[:digit:]]' )
【讨论】:
这工作非常感谢!只是好奇添加的点有什么意义? @BvilleBullet:点表示“任何字符”,星号是重复运算符。我已经扩展了答案。 匹配^[[:digit:]]
会不会更高效?它似乎有效:sqlfiddle.com/#!4/4b9ae/5
@mellamokb:好主意,谢谢。我已将其包含在答案中。
两种方法都可以得到正确的结果。也感谢您的解释。【参考方案2】:
如果您使用的是 SQL Server,请尝试以下操作:
select distinct Issue
from SQLIssue
where AIssue LIKE '[0-9]%'
order by AIssue
查看LIKE
的文档
【讨论】:
我在发布之前也尝试过,但我认为它给出的结果为零,因为整个字符串不会转换为数字。LIKE
子句中的字符范围,例如,[0-9]
,是 SQL Server 特定的(以及其他几个 RDBMS 的)功能:***.com/questions/712580/…。由于您使用的是基于 Oracle 的产品,因此该查询不起作用。【参考方案3】:
另一种解决方案,但不涉及正则表达式:
select distinct Issue
from SQLIssue
where substr(AIssue, 1, 1) between '0' and '9'
order by AIssue
【讨论】:
以上是关于SQL仅获取带有前导数字的字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript 中输出带有前导零的数字? [复制]
SQL Server:如何从字符串中删除前导/尾随非字母数字字符?