1

这是字符串中的字符串:'(a+b)+(x/y)*1000' 我想得到 '(x/y)' 意思是我希望包含除法的部分稍后检查分母 <> 0 以避免被零除。

字符串公式可能会有所不同,但除法总是在括号之间。

我怎样才能在 sql 中实现这一点?

4

2 回答 2

1

删除直到第二次(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)
于 2012-04-20T13:03:30.413 回答
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
)
于 2012-04-20T13:11:45.667 回答