如何使用Oracle从字符串中提取数字?

时间:2017-10-02 21:57:09

标签: sql oracle

我有一个字符串如下:first, last (123456)预期结果应为123456。有人可以帮助我在哪个方向上使用Oracle?

3 个答案:

答案 0 :(得分:1)

您的问题含糊不清,需要澄清。根据您的评论,您似乎要选择左括号后面的六位数字。您可以使用Oracle instr函数查找字符串中字符的位置,然后将其输入substr以选择文本。

select substr(mycol, instr(mycol, '(') + 1, 6) from mytable

或者括号之间是否有不同的位数:

select substr(mycol, instr(mycol, '(') + 1, instr(mycol, ')') - instr(mycol, '(') - 1) from mytable

答案 1 :(得分:1)

这取决于你关心的实际模式(我假设“first”和“last”不是文字的硬编码字符串),但你可能想要使用regexp_substr

例如,这匹配两个括号之间的任何内容(这将适用于您的示例),但如果您的实际示例有多个括号或其他内容,则可能需要更复杂的条件。

SELECT regexp_substr(COLUMN_NAME, '\(([^\)]*)\)', 1, 1, 'i', 1)
FROM TABLE_NAME

答案 2 :(得分:0)

找到最后一个(并在没有尾随)的情况下获取子字符串并将其转换为数字:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE test ( str ) AS
SELECT 'first, last (123456)' FROM DUAL UNION ALL
SELECT 'john, doe (jr) (987654321)' FROM DUAL;

查询1

SELECT TO_NUMBER(
         TRIM(
           TRAILING ')' FROM
           SUBSTR(
             str,
             INSTR( str, '(', -1 ) + 1
           )
         )
       ) AS value
FROM   test

<强> Results

|     VALUE |
|-----------|
|    123456 |
| 987654321 |