2017-05-25 18 views
0

文字列と整数の1つの列を結合するにはどうすればよいですか? --PEOPLE_ID 000092437、PERSONID 92437T-SQL文字列と整数の1つの列を結合する方法

select PC.PEOPLE_ID, Idn.PersonId,'Home Row 1', PC.Phone1 from @NextIdentityID Idn INNER JOIN PEOPLECHANGES PC on Idn.People_ID = PC.People_ID --PEOPLE_ID 000092437, PersonID 92437 one is varchar, one is integer 
union all select PC.PEOPLE_ID, Idn.PersonId,'Office Row 2', PC.Phone2 from @NextIdentityID Idn INNER JOIN PEOPLECHANGES PC on Idn.People_ID = PC.People_ID 
union all select PC.PEOPLE_ID, Idn.PersonId,'Cell Row 3', PC.Phone3 from @NextIdentityID Idn INNER JOIN PEOPLECHANGES PC on Idn.People_ID = PC.People_ID 
+0

https://docs.microsoft.com/en-us/sql/t-sql/functions/conversion-functions-transact-sql – user6144226

+0

:パフォーマンスは、あなたが選択した方向に応じて大幅に異なる場合がありすなわち、 'VarChar'を' Int'に変換するか、またはその逆です。それは、インデックスがあるかどうか、インデックスの統計情報、...かどうかによって異なります。パフォーマンスを向上させるために、インデックス付きの計算列を追加する価値があります。ヒント:適切なソフトウェア(MySQL、Oracle、DB2など)とバージョンの両方でデータベースの質問にタグを付けると便利です。 'sql-server-2014'です。構文と機能の相違は、しばしば答えに影響します。私は最近のいくつかのヴィンテージのSQL Serverを想定しています。 – HABO

答えて

0

varchar()データがエラーを発生させないようにするには、整数に変換できるかどうかを確認する必要があります。これを行う1つの方法は、where句のcase文を使用することです。変換できない場合、結合は機能しませんが、少なくとも問合せはエラーなしで実行できます。

この例では、潜在的なエラーを回避する方法を示します。別に

create table #tempa(id int, descr varchar(50)); 
create table #tempb(id varchar(10), descr varchar(50)); 

insert into #tempa(id,descr) values (1234,'Body getta body getta'); 
insert into #tempb(id,descr) values ('0','sis boom ba - rah rah rah'); 
insert into #tempa(id,descr) values (5678,'Weagle Weagle War Damn Eagle'); 
insert into #tempb(id,descr) values ('0005678','Kickem in the butt Big blue'); 
insert into #tempa(id,descr) values (9012,'this wont have a match'); 
insert into #tempb(id,descr) values ('x0912','sis boom ba'); 

Select a.id as a_id, b.id as b_id 
,a.descr as a_descr, b.descr as b_descr 
from #tempa a 
left join #tempb b 
on a.id = case when isnumeric(b.id) = 1 then cast(b.id as int) else 0 end 

-- this one will raise an error 
Select a.id as a_id, b.id as b_id 
,a.descr as a_descr, b.descr as b_descr 
from #tempa a 
left join #tempb b 
on a.id = b.id 


drop table #tempa; 
drop table #tempb; 
0

あなたが同じ値を取得する整数に先行ゼロと1を変換する場合:

SELECT CONVERT(INT, '000092437') = 92437 

しかし、これはあなたのvarchar型の列のすべてができることを前提としていintに変換する。

それ以外の場合は、先行ゼロを追加する関数を記述する必要があります。

関連する問題