删除 SQL Server 末尾的后缀 (MISS、DR)



所以我的数据目前在客户的名字中有一个后缀。 它可能是: 小姐|夫人|小姐|先生|博士|理学硕士|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

相关内容

  • 没有找到相关文章

最新更新