-1

フォーマットまたはフォーマットのいずれかで、ユーザーが入力した顧客名が入力されている列がありTable1ます。コラムもあります。Input<Surname>, <First Name><First Name> <Surname>CustomerNo

Customersには、顧客名で満たされた列がSurnameあります。顧客ごとにFirstName自動生成された列もあります。CustomerNo

に基づいTable1.CustomerNoて正しいCustomerNofromを入力し、の両方の可能な形式に対応するクエリはどれですか?CustomersTable1.InputInput

4

1 に答える 1

0

名前をコンポーネントに分割するハッキーな方法は次のとおりです(SQL-Server方言)。

create table InputNames (InputName nvarchar(50));

insert into InputNames (InputName) values ('Smith, John');
insert into InputNames (InputName) values ('Mary Smith');
insert into InputNames (InputName) values ('Mark Jones');
insert into InputNames (InputName) values ('White, Barry');
insert into InputNames (InputName) values ('Damien Drybread, Esquire');

select 
InputName, 
case when charindex(',', inputname, 1) = 0 then 
substring (inputname, 1, charindex (' ', inputname, 1) - 1) 
else 
substring (inputname, charindex (',', inputname, 1) + 2, 99) 
end
as firstname,
case when charindex(',', inputname, 1) = 0 then 
substring (inputname, charindex (' ', inputname, 1) + 1, 99) 
else 
substring (inputname, 1, charindex (',', inputname, 1) - 1) 
end
as lastname

from inputnames

これが出力です

InputName   firstname   lastname
Smith, John John    Smith
Mary Smith  Mary    Smith
Mark Jones  Mark    Jones
White, Barry    Barry   White
Damien Drybread, Esquire    Esquire Damien Drybread

...そして、名前にファーストネームとラストネームの間の区切り文字ではないコンマを含めることができる場合に対応する必要があるコーナーケースがあることがわかります。

同様のアプローチがMSAccessでも機能しますが、caseステートメントの代わりに「Iif」を使用し、charindexの代わりに「InStr」を使用する必要があります。

于 2012-12-20T07:56:00.543 に答える