1

これが文字列です:'(a + b)+(x / y)* 1000'その文字列から取得したい'(x / y)'は、除算を含む部分が分母<>かどうかを後でチェックすることを意味しますゼロによる除算を避けるために0。

文字列の数式はさまざまですが、分割は常に括弧の間にあります。

SQLでそれをどのように達成できますか?

4

2 に答える 2

1

(を使用して 2 番目までのすべてを削除し、を使用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)
于 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 に答える