我在Oracle中有一个表,其中一列包含以\形式的UserIds。例如“fin \ george”,“sales \ andy”等。如何使用REGEXP_SUBSTR函数仅从UserIds获取。即我只想获取“george”,“andy”等。我已经使用SUBSTR函数实现了所需的reult,但我想在这种情况下使用REGEXP_SUBSTR。
我试过这样做:
SELECT REGEXP_SUBSTR('fin\george','\[^\]+,') "UserName" FROM DUAL;
但它没有帮助。任何人都可以指出我的错误吗?
答案 0 :(得分:3)
我相信您想要使用带有反向引用的regexp_replace
。我假设\
之前和之后的所有字符都是字母的。如果您允许使用数字,则需要使用[[:alnum:]]
而不是[[:alpha::]
。
1* SELECT REGEXP_replace('fin\george',
'([[:alpha:]]+\\)([[:alpha:]]+)$',
'\2') "UserName"
FROM DUAL
SQL> /
UserNa
------
george
答案 1 :(得分:0)
您必须使用转义:\\而不是\
答案 2 :(得分:0)
SQL> SELECT REGEXP_SUBSTR('fin\george', '[^\]+', 1, 2) AS userId from dual;
USERID
------
george
答案 3 :(得分:0)
最简单的方法(恕我直言)如下:
SELECT REGEXP_SUBSTR('fin\george', '[^\\]+$') AS "UserName" FROM DUAL;
原始查询的问题是(a)\
字符未被转义,(b)正则表达式中存在无关的逗号。我在这里使用了字符串结尾锚$
,假设\
分隔的元素不超过两个。如果有两个以上,而您只需要第二个,则可以使用以下内容:
SELECT REGEXP_SUBSTR('fin\george\ringo', '[^\\]+', 1, 2) AS "UserName"
FROM DUAL;
这告诉Oracle开始查看字符串的第一个字符并返回第二个匹配。