sql - 如果字段中有多个括号,如何在 SQL 中使用 SUBSTRING 和 CHARINDEX 仅返回括号中包含的字段的右侧部分?
问题描述
我有一列包含 varchar 数据的数据,并且我一直在尝试使用 CHARINDEX 和 SUBSTRING 仅返回包含括号的部分:
列数据:'这是一个(示例)'
我使用以下代码从上述数据中返回“示例”:
SELECT SUBSTRING (column, CHARINDEX('(', column)+1 , CHARINDEX(')', column)- CHARINDEX('(', column)-1 )
这很好用,但是,在某些情况下,字段中的数据在两个括号之间多次出现:
- '这(是)一个(例子)'
这意味着我上面的代码返回'is'。在我的数据中,我想要返回的是最右边括号中的数据:
- '这(是)一个(示例)' - 我想返回'示例'
- 'this (is) some (text)' - 我想返回'text'
- '这(是)绝对(不是)一个(数字)' - 我想返回'数字'
ETC
解决方案
在您的所有示例中,最后一个字符是)
. 如果这总是正确的,那么最简单的方法可能是:
select replace(stuff(v.str, 1, len(v.str) - charindex('(', reverse(v.str)) - 1, ''), ')', '')
from (values ('this (is) definitely (not) a (number)')) v(str);
更通用的解决方案是:
select v.str,
replace(stuff(v2.str, 1, len(v2.str) - charindex('(', reverse(v2.str) + '(') + 1, ''), ')', '')
from (values ('this (is) definitely (not) a (number)'),
('this (is) definitely (not) a (number) alas'),
('no parens')
) v(str) cross apply
(values (left(v.str, len(v.str) - charindex(')', reverse(v.str) + ')') + 1))) v2(str);
推荐阅读
- keras - 反正有没有用谷歌的 AutoML 训练一个分类模型,混合(语言和表格)数据?
- excel - 在 VBA 中向 Excel 表中添加一行会重新计算
- python - 混淆二进制字符串中的位数(Python)
- javascript - 在不刷新页面的情况下重置图像裁剪器很热?
- powershell - 获取在某个日期之后创建的所有 AD 计算机
- java - Arraylist 输出重复
- anylogic - 如何创建与旧版本兼容的 anylogic 文件的副本?
- loops - Ansible Hosts 在剧本中循环
- google-apps-script - 加载的 Google 表格上的程序化弹出窗口?
- kubernetes - 负载均衡器服务故障排除