これは、文字列の下に動作するように再帰CTEを使用します。
DECLARE @string NVARCHAR(MAX)=
N'PATCHES/WORKAROUNDS: o December, 2016 Security and Quality Rollup for Microsoft .NET Framework 4.5.2 on Windows Server 2012 for x64 (KB3205403) Microsoft .NET Framework 4.5.2 on Windows Server 2012 for x64 (KB3205254) Microsoft .NET Framework 4.5.2 on Windows Server 2012 for x64 (KB3205418)';
DECLARE @KBPattern NVARCHAR(MAX)=N'%(KB[0-9][0-9][0-9][0-9][0-9]%)%';
WITH recCTE AS
(
SELECT LEFT(@string,PATINDEX(@KBPattern,@string)+10) AS Part
,SUBSTRING(@string,PATINDEX(@KBPattern,@string)+12,4000) AS Rest
UNION ALL
SELECT LEFT(recCTE.Rest,PATINDEX(@KBPattern,recCTE.Rest)+10) AS Part
,SUBSTRING(recCTE.Rest,PATINDEX(@KBPattern,recCTE.Rest)+12,4000) AS Rest
FROM recCTE
WHERE PATINDEX(@KBPattern,recCTE.Rest)>0
)
SELECT SUBSTRING(Part,posKB,15) AS KB_Number
,LEFT(Part,posKB-1) AS KB_Text
FROM recCTE
OUTER APPLY(SELECT PATINDEX(@KBPattern,Part)) AS A(posKB)
KB_Number KB_Text
(KB3205403) PATCHES/WORKAROUNDS: o December, 2016 Security and Quality Rollup for Microsoft .NET Framework 4.5.2 on Windows Server 2012 for x64
(KB3205254) Microsoft .NET Framework 4.5.2 on Windows Server 2012 for x64
(KB3205418) Microsoft .NET Framework 4.5.2 on Windows Server 2012 for x64
'instr'機能がoracle'、ない' SQL Server'、plzはmodfiy番目 'に既存された結果を適切なタグだけを追加するタグ –
SQLクエリはこのジョブのツールではありません。それが最良のツールではないだけでなく、私はそれを行う方法を考えることができません。誰かが私がそれを見るのに興味があることができるならば。テーブル値のユーザ定義関数(文字列を取り、必要な部分文字列のテーブルを返す)を書くことができます。あなたは* that *をクエリで使うことができます。または、単に 'Contents'値を照会してクライアント側で処理します。 –
@AmrElsayed生データがどのように構造化されているかを知っていれば、これに対するクエリを生成する方が簡単です。 –