0

中かっこの間で値を個別に分割するクエリが必要です。

私のvarchar値は

16(8),14(10)

として分割する必要があります

16,14

1614の値だけが必要ですが、(8) (10)中括弧内の値は必要ありません

私はこのクエリを試しました

select
  case 
    when charindex('(0-9)', OtherProduct) > 0
    then rtrim(left(OtherProduct, charindex('(0-9)', OtherProduct)-1))
    else OtherProduct end as OtherProduct
from dbo.rxnreactions where rsd='P=15(61),16(8),14(10)R=1,7S=9012'

誰でも私がそれを分割するのを手伝ってくれますか?

4

1 に答える 1

0

関数を使用してコンマで分割し、次に角かっこで分割し、最後に単一の文字列に結合します

SELECT SplitByBrackets.val 
FROM dbo.StringSplit(N'16(8),14(10)',N',') SplitByComma
CROSS APPLY StringSplit(SplitByComma.val,N'(') SplitByBrackets
WHERE SplitByBrackets.id % 2 = 1

StringSplitのサンプルは

CREATE FUNCTION [dbo].[StringSplit]
(
  @delimited nvarchar(max),
  @delimiter nvarchar(100)
) RETURNS @t TABLE
(
-- Id column can be commented out, not required for sql splitting string
  id int identity(1,1), -- I use this column for numbering splitted parts
  val nvarchar(max)
)
AS
BEGIN
  declare @xml xml
  set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'

  insert into @t(val)
  select 
    r.value('.','varchar(max)') as item
  from @xml.nodes('//root/r') as records(r)

  RETURN
END

それをいじる

于 2013-07-18T05:17:06.600 に答える