我正在尝试从我的列中选择一个特定值。可能应该通过regexp函数来完成,但我一直遇到一些问题......
列名:Column1
Value1: 'Value\sdf90df\015'
Value2: 'Value\f213jdj\012'
Value3: 'Value\kjsd2ej\031'
有没有办法选择:sdf90df,f213jdj,kjsd2ej?
答案 0 :(得分:1)
您可以使用regex_substr()
执行此操作。像这样:
select replace(regex_substr(column1, '[\\][^\\]+[\\]', 0, 2), '\\', '')
答案 1 :(得分:1)
您可以使用此版本。
select regexp_replace( Column1, '.+\\([^\\]+)\\.+', '\1' )
from yourTable
我正在做的是选择Column1,其函数根据正则表达式进行替换regexp_replace
我使用的正则表达式是.+\\([^\\]+)\\.+
打破它:
.+\\
- 这会获得所有内容,直到找到\
我们使用两个\\
,因为它需要被挖掘。
([^\\]+)
- 这一部分在括号内被理解为一个捕获组(我稍后会谈到它)我在这里说的是得到的所有不是\
并且
\\.+
获得破折号和其他所有内容
我正在使用的regexp_replace
有这样的参数:regexp_replace(source, regex, replacement)
所以在我的替换中我使用了字符串\1
,这意味着从正则表达式得到的只是组1
所以,你的字符串是'Value\sdf90df\015'
在正则表达式上打破它:
Value\
然后是sdf90df
,这是第1组(由于进行了排便),然后是\015
在这个答案的第一个版本中,我使用了$1
,因为一些正则表达式处理器使用它\1
,但对于oracle,正确的表达式为\NUMBER
来指定捕获基。
希望解释能澄清你的怀疑。