これが文字列です:'(a + b)+(x / y)* 1000'その文字列から取得したい'(x / y)'は、除算を含む部分が分母<>かどうかを後でチェックすることを意味しますゼロによる除算を避けるために0。
文字列の数式はさまざまですが、分割は常に括弧の間にあります。
SQLでそれをどのように達成できますか?
これが文字列です:'(a + b)+(x / y)* 1000'その文字列から取得したい'(x / y)'は、除算を含む部分が分母<>かどうかを後でチェックすることを意味しますゼロによる除算を避けるために0。
文字列の数式はさまざまですが、分割は常に括弧の間にあります。
SQLでそれをどのように達成できますか?
(
を使用して 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)
あなたがすでに持っているように見えるビット(あなたが行ったコメントに基づく) ...
'/'
=の位置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
)