サブ文字列とcharインデックス関数を使用してSQLで特定のビットのデータを選択する方法について多くの記事を見てきましたが、私のニーズに合わせることができません。特定の単語の後で文字の前に36文字を選択
特定の単語の後に36文字を選択しようとしています。開始語はsystemuser|
で、文字列の最後にある;
の前です。文字列にsystemuser|
のインスタンスが複数ある場合は、最初のインスタンスを選択する必要があります。
サンプルデータ:
CREATE TABLE #Temp (col nvarchar(max))
INSERT INTO #Temp (col)
values ('account|f50aa0e3-2f87-e311-8502-005056b412da;systemuser|765e4a01-1802-e611-80dc-5065f38aca11;systemuser|9fa34207-1802-e611-80dc-5065f38aca11;account|0aa90a25-1786-e311-8502-005056b412da;contact|381e4b65-4387-e311-8502-005056b412da;contact|32eecd7a-dc8c-e311-8502-005056b412da;contact|2e536442-ebf7-e511-a997-005056b412da;contact|f45fac8d-4187-e311-8502-005056b412da')
,('contact|32eecd7a-dc8c-e311-8502-005056b412da')
,('systemuser|ab1852fb-1702-e611-80dc-5065f38aca11')
,('account|5d807c84-da86-e311-8502-005056b412da;systemuser|34ae3f0d-1802-e611-80dc-5065f38aca11')
,('account|08a90a25-1786-e311-8502-005056b412da;contact|369ede29-4287-e311-8502-005056b412da;systemuser|01ae3f0d-1802-e611-80dc-5065f38aca11')
SELECT * FROM #Temp
これまでのところ私はsubstring
とcharindex
の異なる組み合わせの多くを試みたが、私はそれが何を選択するように改正する必要がどのようにしてグリップを得ることができない怖いですが欲しいです。
SELECT
col
,CASE WHEN col LIKE '%systemuser|%' THEN SUBSTRING(col, CHARINDEX('systemuser|', col), LEN(col)) ELSE NULL END AS TESTTHIS
, SUBSTRING(col, CHARINDEX('|', col), LEN(col))
,RIGHT(col, charindex('|', col) - 1)
--,SUBSTRING(col, CHARINDEX('systemuser|', col), CHARINDEX(';',col) - CHARINDEX('systemuser|', col) + Len(';'))
-- ,CASE WHEN LEFT(col, 3) = 'sys' THEN right(col, charindex('systemuser|', reverse(col)) - 1) ELSE NULL END AS ToUser
--,SUBSTRING(col, CHARINDEX('systemuser|', col) + 10, CHARINDEX(';', col) - (CHARINDEX('systemuser|', col) + 12))
--,SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('systemuser|', col))) + 1, LEN(col) - LEN(LEFT(col, CHARINDEX ('systemuser|', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX (';', col))) - 1)
FROM #temp
コメントアウトされたコードは機能しません。私が試したことを示すためにそれらを貼り付けると思いました。上記の行の順序で
望ましい結果は:
'765e4a01-1802-e611-80dc-5065f38aca11'
,NULL
,'ab1852fb-1702-e611-80dc-5065f38aca11'
,'34ae3f0d-1802-e611-80dc-5065f38aca11'
,'01ae3f0d-1802-e611-80dc-5065f38aca11'
誰もがとても親切、私は非常に感謝される私の問題で私を助けするようにすることでした。
ご協力いただきありがとうございます。
だけのサンプルデータ&目的のO/Pを置きます。 –
が私の望む結果を追加しました - 謝罪、私はあなたの編集で提案されたようにそれを書式に見えるようにする方法を知らない。 – Kriss