0

SQL テーブルに次の形式の列 (varchar400) があります。

Info
UserID=1123456,ItemID=6685642

列は POS アプリケーションを介して作成されるため、単純に 2 つの列に分割するという通常の操作を行うことはできません。私の問題は、この列が製品の属性をデータベースに保存するために使用されていることです。そのため、UserID と ItemID のみに関心がありますが、ここには次のような余分な情報が保存されている可能性があります。

   Info
   IrrelevantID=666,UserID=123124,AnotherIrrelevantID=1232342,ItemID=1213124.

取得したいのは単純に 2 つの列であり、これらの属性がどちらもInfo列に存在しない場合でもエラーは発生しません。:

UserID ItemID
123124 1213124

ID の長さがすべて可変であるが、すべての属性がコンマ区切りで統一されたスタイル (つまり、"UserID=number") に従っている場合、エラー チェックを使用してこれを効果的に行うことは可能でしょうか。

私の問題に対処する最善の方法を誰か教えてもらえますか?

どうもありがとう。

4

3 に答える 3

0

ItemID=1213124 と仮定します。ドットで終了します。

Declare @t Table (a varchar(400))
insert into @t values ('IrrelevantID=666,UserID=123124,AnotherIrrelevantID=1232342,ItemID=1213124.')
insert into @t values ('IrrelevantID=333,UserID=222222,AnotherIrrelevantID=0,ItemID=111.')

Select 
STUFF(
Stuff(a,1,CHARINDEX(',UserID=',a) + Len(',UserID=')-1 ,'' )
,CharIndex
(',',
Stuff(a,1,CHARINDEX(',UserID=',a) + Len(',UserID=')-1 ,'' )
) 
,400,'') as UserID

,
STUFF(
Stuff(a,1,CHARINDEX(',ItemID=',a) + Len(',ItemID=')-1 ,'' )
,CharIndex
('.',
Stuff(a,1,CHARINDEX(',ItemID=',a) + Len(',ItemID=')-1,'' )
) 
,400,'') as ItemID
from @t
于 2013-06-25T16:50:36.037 に答える