我有一个字符串如下:first, last (123456)
预期结果应为123456
。有人可以帮助我在哪个方向上使用Oracle?
答案 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)
找到最后一个(
并在没有尾随)
的情况下获取子字符串并将其转换为数字:
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 |