这是字符串中的字符串:'(a+b)+(x/y)*1000' 我想得到 '(x/y)' 意思是我希望包含除法的部分稍后检查分母 <> 0 以避免被零除。
字符串公式可能会有所不同,但除法总是在括号之间。
我怎样才能在 sql 中实现这一点?
这是字符串中的字符串:'(a+b)+(x/y)*1000' 我想得到 '(x/y)' 意思是我希望包含除法的部分稍后检查分母 <> 0 以避免被零除。
字符串公式可能会有所不同,但除法总是在括号之间。
我怎样才能在 sql 中实现这一点?
删除直到第二次(
using的所有内容,stuff
并将字符带到下一次)
using 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)
您似乎已经拥有的位(基于您所做的评论) ...
'/'
=的位置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
)