2016-09-08 12 views
1

私は値を持つテーブルを持っています。それはntextです。区切られた値は空白、1つの数字、セミコロンで区切られた数字(図のように)文字列の値を表示します。最初の値だけを表示

私はこのコードを持っています。サブストリングは探しています。最初の値を示します。値が区切られている場所でのみ動作します。だから私はそれをどのように変えることができます、それは最初の価値を示すでしょう。また単一の値。だからテーブルのベローから私は64,60008, ,127を取得します。

SELECT 
T0.U_Scid as 'id', 
T3.U_Boarding as 'start', 
T3.U_Boarding as 'end', 

SUBSTRING(T5.U_Partner, 0, CHARINDEX(';', T5.U_Partner)) AS 'room_id', 

CASE WHEN datalength(T5.U_Partner)=0 THEN '9999' ELSE T5.U_Partner END AS 'room_id' , 
CASE WHEN datalength(T5.U_Partner) > 4 THEN T5.U_Partner ELSE '9999' END AS 'partners_id' , 

これは単なるボーナスの質問です。 CASEは、値が4(600008)より大きい場合は値の長さを検索し、room_id 9999に書き込み、600008をpartners_idに保存します。空の場合は9999をroom_idに書き込みます。

それは一緒に働くようにするには?.so T_Partnerから値を取得する..テンポラリテーブルT1.TempRoom(私は).. so T1.TempRoom(64、、60008,127のような数字で埋まっている) CASEはT1.TempRoomに値をチェックし、それをroom_idとpartners_idに保存します。

私は正しいですか?

SUBSTRING(T5.U_Partner, 1, CHARINDEX(';', T5.U_Partner + ';')) AS room_id, 

CHARINDEX()の引数にセミコロンを連結し、次のとおりです。ここで

答えて

2

は簡単な方法です。これにより、エラーが発生しないようにします。また

、1でSUBSTRING()開始のためのインデックスではなく、0

とは、列名のために単一引用符を使用しません。文字列と日付リテラルにのみ使用してください。

EDIT:追加オペレータに互換性がありませんntext型とvarchar

(CASE WHEN T5.U_Partner LIKE '%;%' 
     THEN SUBSTRING(T5.U_Partner, 1, CHARINDEX(';', T5.U_Partner + ';')) 
     ELSE T5.U_Partner 
END) AS room_id 
+0

データ型:

あなたは常に冗長な形式を使用することができます。 – Burco

+0

@Burco。 。 。私はあなたのコメントが何を指しているのか分かりません。 SQL Serverでは、文字列の連結および追加に '+'が使用されます。 –

+0

私は知っています。しかし、私はこのエラーメッセージを受け取ります。 + 'を削除すると、以前と同じようにすべてが機能しています。したがって、数値が区切られたテキストの値のみを表示してください。単一の値ではありません。 – Burco

関連する問題