我需要选择一个在()之间找到的子字符串。起始位置和结束位置以及子字符串的长度都会有所不同。我在以下方面取得了一定的成功,但不是100%。
它对某些值有效,但对另一些值无效,它返回空白,还将更改值大写格式,换句话说,如果值是'Test‘,它将显示为'TEST’。
SELECT SUBSTRING(columnName, CHARINDEX('(', LEN(columnName)),
CHARINDEX(')', columnName) - CHARINDEX('(',columnName)) AS INPUT
FROM tableName更新只有1组括号()
发布于 2015-04-29 15:04:30
如果您只出现一次(和),则此操作将有效。
SELECT
SUBSTRING(columnName,
CHARINDEX('(', columnName)+1,
CHARINDEX(')', columnName) - CHARINDEX('(', columnName)-1)
FROM tableName如果您的值没有任何(...)内容,请添加以下where子句:
WHERE CHARINDEX('(', columnName) > 0 AND
CHARINDEX(')', columnName) > CHARINDEX('(', columnName)发布于 2015-04-29 15:12:40
说明no、嵌套或不完整的()
;with t(f) as (
select 'aaa(bbb)ccc' union
select 'aaa(bbbccc' union
select 'aaabbb)ccc' union
select 'aaa()ccc' union
select '(aaa(?))ccc'
)
select f,
case when patindex('%(%)%', f) > 0
then substring(f, charindex('(', f ) + 1, (len(f) - charindex(')', reverse(f))) - charindex('(', f ))
else ''
end
from t
>>
f (No column name)
aaa()ccc
aaa(bbb)ccc bbb
(aaa(?))ccc aaa(?)
aaa(bbbccc
aaabbb)ccc 发布于 2015-04-29 15:05:30
在Postgres中,可以使用POSIX正则表达式捕获来完成此操作:
=> select substring('This (might) work' from '[(](.*)[)]');
substring
-----------
mightserver似乎确实提供了正则表达式支持,但我并不熟悉它,我也没有一个运行测试用例的平台。这个特殊的例子很棘手,因为您必须正确引用分隔符()。
https://stackoverflow.com/questions/29947321
复制相似问题