首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择子字符串SQL

选择子字符串SQL
EN

Stack Overflow用户
提问于 2015-04-29 14:53:05
回答 3查看 489关注 0票数 8

我需要选择一个在()之间找到的子字符串。起始位置和结束位置以及子字符串的长度都会有所不同。我在以下方面取得了一定的成功,但不是100%。

它对某些值有效,但对另一些值无效,它返回空白,还将更改值大写格式,换句话说,如果值是'Test‘,它将显示为'TEST’。

代码语言:javascript
运行
复制
SELECT SUBSTRING(columnName, CHARINDEX('(', LEN(columnName)),
CHARINDEX(')', columnName) - CHARINDEX('(',columnName)) AS INPUT
FROM tableName

更新只有1组括号()

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-29 15:04:30

如果您只出现一次(),则此操作将有效。

代码语言:javascript
运行
复制
SELECT 
    SUBSTRING(columnName, 
              CHARINDEX('(', columnName)+1, 
              CHARINDEX(')', columnName) - CHARINDEX('(', columnName)-1)
FROM tableName

如果您的值没有任何(...)内容,请添加以下where子句:

代码语言:javascript
运行
复制
WHERE    CHARINDEX('(', columnName) > 0 AND 
         CHARINDEX(')', columnName) > CHARINDEX('(', columnName)
票数 6
EN

Stack Overflow用户

发布于 2015-04-29 15:12:40

说明no、嵌套或不完整的()

代码语言:javascript
运行
复制
;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  
票数 2
EN

Stack Overflow用户

发布于 2015-04-29 15:05:30

在Postgres中,可以使用POSIX正则表达式捕获来完成此操作:

代码语言:javascript
运行
复制
=> select substring('This (might) work' from '[(](.*)[)]');
 substring 
-----------
 might

server似乎确实提供了正则表达式支持,但我并不熟悉它,我也没有一个运行测试用例的平台。这个特殊的例子很棘手,因为您必须正确引用分隔符()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29947321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档