这是字符串:'(a + b)+(x / y)* 1000' 从那个字符串我想得到'(x / y)'意味着我希望包含该除法的部分稍后检查如果分母<> 0以避免被零除。
字符串公式可以有所不同,但除法总是在括号之间。
我如何在sql中实现这一目标?
答案 0 :(得分:1)
使用(
删除第二个stuff
的所有内容,然后使用)
将字符移至下一个left
。
declare @S varchar(20)
set @S = '(1+2)+(3/4)*1000'
select left(S2.S, charindex(')', S2.S)-1)
from (select stuff(@S, 1, charindex('(', @S), '')) as S1(S)
cross apply (select stuff(S1.S, 1, charindex('(', S1.S), '')) as S2(S)
答案 1 :(得分:1)
看来您已经拥有(基于您所做的评论) ......
'/'
= CHARINDEX('/', yourString)
')'
= CHARINDEX(')', yourString, CHARINDEX('/', yourString) + 1)
(
的位置略有不同,因为您需要向后搜索。所以你需要反转字符串。所以你还需要改变起始位置。
CHARINDEX('(', REVERSE(yourString), LEN(yourString) - CHARINDEX('/', yourString) + 2)
从右侧给出位置。 LEN(yourString) - position + 1
从左侧给出位置。
将所有这些加在一起,你得到一个很长的公式...
SUBSTRING(
yourString,
LEN(yourString)
- CHARINDEX('(', REVERSE(yourString), LEN(yourString) - CHARINDEX('/', yourString) + 2)
+ 1,
CHARINDEX(')', yourString, CHARINDEX('/', yourString) + 1)
- LEN(yourString)
+ CHARINDEX('(', REVERSE(yourString), LEN(yourString) - CHARINDEX('/', yourString) + 2)
- 1
)