在Table1
中,有Input
列,其中包含用户输入的客户名称,格式为<Surname>, <First Name>
或<First Name> <Surname>
。还有CustomerNo
列。
在表格Customers
中,Surname
和FirstName
列填充了客户名称。每个客户都有一个自动生成的CustomerNo
列。
哪个查询会根据Table1.CustomerNo
使用来自CustomerNo
的正确Customers
填充Table1.Input
,以适应Input
的两种可能格式?
答案 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。