データ側ではなく、プログラム側で文字列の解析を行うことを強くお勧めします。そうは言っても、絶対に必要な場合は、次のようなことを試すことができます。
DECLARE @String [nvarchar](256) = 'Name=Praveen | City=Hyderabad | Mobile=48629387429 | Role=User |'
DECLARE @name [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('Name=', @String)+5, CHARINDEX('|', @String)))
DECLARE @city [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('City=', @String)+5, CHARINDEX('|', @String)))
DECLARE @mobile [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('Mobile=', @String)+7, CHARINDEX('|', @String)))
DECLARE @role [nvarchar](256) = (SELECT SUBSTRING(@String, CHARINDEX('Role=', @String)+5, CHARINDEX('|', @String)))
SELECT RTRIM(LTRIM(LEFT(@name, CHARINDEX('|', @name)-1))) AS Name,
RTRIM(LTRIM(LEFT(@city, CHARINDEX('|', @city)-1))) AS City,
RTRIM(LTRIM(LEFT(@mobile, CHARINDEX('|', @mobile)-1))) AS Mobile,
RTRIM(LTRIM(LEFT(@role, CHARINDEX('|', @role)-1))) AS Role
これは以下を返します:
Name | City | Mobile | Role
________________________________________________
Praveen | Hyderabad | 48629387429 | User
最初のクエリでから追加される長さはCHARINDEX
、検索文字列と等しいことに注意してください。
"Name=" は 5 文字に等しいので、インデックスを = 記号を超えて移動するために 5 を追加します。"Mobile=" は 7 に等しいので、7 を追加します。
同様に、最後のSELECT
クエリでは、それぞれCHARINDEX
から 1 を引いて | を削除しています。シンボル。
ソース:
サブストリング
チャリデックス
左
Lトリム
Rトリム