如何使用可能采用不同格式的名称填充数据库表?

时间:2012-12-20 04:25:01

标签: sql sql-server string ms-access

Table1中,有Input列,其中包含用户输入的客户名称,格式为<Surname>, <First Name><First Name> <Surname>。还有CustomerNo列。

在表格Customers中,SurnameFirstName列填充了客户名称。每个客户都有一个自动生成的CustomerNo列。

哪个查询会根据Table1.CustomerNo使用来自CustomerNo的正确Customers填充Table1.Input,以适应Input的两种可能格式?

1 个答案:

答案 0 :(得分:0)

这是将名称拆分为组件的一种hacky方式(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

...你可以看到,如果你的名字中的逗号不是名字和姓氏之间的分隔符,你需要提供一些角落案例。

类似的方法适用于MS Access,但您必须使用“Iif”而不是case语句,而使用“InStr”而不是charindex。