如果我有数千行数据,我想知道列是否为“Last” 名称“包含名字和姓氏(也可能是中间名称)。什么SQL命令 我用吗? (SQL Server 2008)。找到后,如何拆分姓氏字段和位置 他们自己的专栏中的名字或中间名?
例如:
First Name MI Last Name
John B. Smith
Karen A. Jones
Jane Lawrence
Joan K. Bates
是否可以在Excel中完成?
答案 0 :(得分:0)
您可以在姓氏中查找空格:
select *
from t
where lastname like '% %';
您可以查找缺少名字的行:
select *
from t
where firstname is null or firstname = '';
编辑:
如果我们假设名称是样本数据中给出的“简单”,您可以这样做:
update t
set firstname = left(lastname, charindex(' ', lastname) - 1),
lastname = right(lastname, charindex(' ', reverse(lastname))),
mi = (case when lastname like '% % %'
then rtrim(ltrim(substring(lastname, charindex(' ', lastname + 1), 2)))
end)
where lastname like '% %' and firstname is null;
这对格式做了很多假设。 。 。没有完整的中间名,没有荣誉,没有后缀,没有多个空格在一起。但是,如果您的数据很简单,它应该可以正常工作。
Here是SQL Fiddle中逻辑的一个例子。
答案 1 :(得分:0)
我会两次通过:
-- Set first name
UPDATE names
SET FirstName = SUBSTR(LastName,1,CHARINDEX(' ',LastName) - 1),
LastName = SUBSTR(LastName,CHARINDEX(' ',LastName) + 1, LEN(LastName))
WHERE FirstNAme IS NULL
AND CHARINDEX(' ',LastName) > 0
-- Set middle name
UPDATE names
SET MI = SUBSTR(LastName,1,CHARINDEX(' ',LastName) - 1),
LastName = SUBSTR(LastName,CHARINDEX(' ',LastName) + 1, LEN(LastName))
WHERE MI IS NULL
AND CHARINDEX(' ',LastName) > 0
你可能会有一些误报,但这应该是绝大多数情况。
我强烈建议创建一个事务,进行更新,执行SELECT
查看结果并回滚事务,因为更新不可逆。