所以我的数据目前在客户的名字中有一个后缀。 它可能是: 小姐|夫人|小姐|先生|博士|理学硕士|JT|冠心病|CHLD|院长|修订|磁共振|伯爵|干燥率|院长|微星.
我试图摆脱最后的后缀。
下面是一个数据示例
名字:
露丝·安妮夫人
克里斯托弗先生
这是我写的代码,但我的代码只删除了一个字母,所以露丝安妮MRS将显示为露丝安妮MR
REPLACE(SUBSTRING(First_Name, CHARINDEX('MISS|MRS|MISS|MR|DR|MS|JT|CHD|CHLD|DEAN|REV|MRI|EARL|DRI|DEAN|MSI', First_Name), LEN(First_Name)), 'MISS|MRS|MISS|MR|DR|MS|JT|CHD|CHLD|DEAN|REV|MRI|EARL|DRI|DEAN|MSI', ' ')
编写 SQL:
获取反向字符串中第一个空格字符的 CHARINDEX,
检查该子字符串是否符合后缀模式之一,
如果是这样,则返回按该子字符串的长度缩短(使用 LEFT(的原始字符串。
您可以使用以下查询删除末尾的后缀
DECLARE @string VARCHAR(4000);
集合 @string = 空格 (1( + "露丝·安妮夫人";
与删除(字( 作为 ( 选择"小姐"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"夫人"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"小姐"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"先生"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"DR"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"MS"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"JT"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"CHD"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"CHLD"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"院长"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"修订"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"MRI"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"伯爵"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"DRI"整理SQL_LATIN1_GENERAL_CP1_CI_AS全部 选择"院长"整理SQL_LATIN1_GENERAL_CP1_CI_AS工会 全部
选择"MSI"整理SQL_LATIN1_GENERAL_CP1_CI_AS ) 选择 @string = 取代 ( @string整理SQL_LATIN1_GENERAL_CP1_CI_AS, ToRemove.word COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS, 空格(1( 整理SQL_LATIN1_GENERAL_CP1_CI_AS ) 从 到 删除 其中字符索引 ( ToRemove.word COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS, @string整理SQL_LATIN1_GENERAL_CP1_CI_AS (> 0;
选择@string;
如果您将标题存储到表中,则可以使用单个 SELECT 来完成
准备测试数据
CREATE TABLE #titles (title nvarchar(10));
INSERT INTO #titles (title) VALUES ('M.'), ('Mme'), ('Mlle');
CREATE TABLE #data (fullname nvarchar(100));
INSERT INTO #data (fullname) VALUES
('John Doe M.'),
('Mary Jones Mme'),
('Doctor Who Mme'),
('Leia Organa Mlle')
查询
SELECT
d.fullname,
SUBSTRING(d.fullname, 1, LEN(d.fullname) - LEN(t.title)) AS new_fullname,
SUBSTRING(d.fullname, LEN(d.fullname) - LEN(t.title) + 1, LEN(t.title)) AS found_title
FROM #data d LEFT JOIN #titles t ON d.fullname LIKE '%' + t.title
结果
fullname new_fullname found_title
------------------------------ ------------------------------ ------------------------------
John Doe M. John Doe M.
Mary Jones Mme Mary Jones Mme
Doctor Who Mme Doctor Who Mme
Leia Organa Mlle Leia Organa Mlle