sql - 将全名拆分为姓氏名字中间名和后缀
问题描述
如何将全名拆分为姓氏名字中间名后缀?例如: 1.Smith John T PHD 2.smith john 3.smith john T 名称以空格分隔。此名称列有这 3 种不同的类型。
Desired output:
1) Smith -- 姓 John -- 名 T -- 中间名 Phd -- 后缀
2)史密斯--姓约翰--名字
3) 史密斯--姓约翰--名字 T--中间名
解决方案
/*
APPROACH:
STEP 1: DECLARE FOUR VARIABLES TO HOLD -- LAST NAME, FIRST NAME, MIDDLE
NAME AND SUFFIX
STEP 2: TRAVERSE THE STRING, AND KEEP A TRACK OF NUMBER OF SPACES YOU ARE
GETTING
STEP 2.1 IF SPACE_NUM = 1, INITIALIZE THE STRINGS YOU ARE VISITED UPTO
NOW, INTO 'LAST NAME'
STEP 2.2 IF SPACE_NUM = 2, INITIALIZE THE STRINGS YOU ARE VISITED UPTO
NOW, INTO 'FIRST NAME'
STEP 2.3 IF SPACE_NUM = 3, INITIALIZE THE STRINGS YOU ARE VISITED UPTO
NOW, INTO 'MIDDLE NAME'
STEP 3. INITIALIZE THE THE LAST STRINGS YOU VISITED INTO 'SUFFIX'
NOTE: ASSUMING THE STRINGS ARE SAME FORMAT YOU MENTIONED.
NOTE: FOR GETTING THE FIRST STRING A.K.A LAST NAME, WE HAVE TO PUT EXTRA-
SPACE IN FRONT OF STRING.
*/
DECLARE @STRING AS VARCHAR(50) = 'Smith John T PHD'
SET @STRING = ' '+@STRING
DECLARE @FIRST_NAME AS VARCHAR(30) = ''
DECLARE @LAST_NAME AS VARCHAR(30) = ''
DECLARE @MIDDLE_NAME AS VARCHAR(30) = ''
DECLARE @SUFFIX AS VARCHAR(30) = ''
DECLARE @I AS INT = 1
DECLARE @COUNT AS INT =0
DECLARE @STR AS VARCHAR(20) =''
WHILE @I <> LEN(@STRING)+1
BEGIN
IF SUBSTRING(@STRING, @I, 1) = ' '
BEGIN
SET @COUNT = @COUNT +1
SET @I = @I +1
CONTINUE
END
SET @STR += SUBSTRING(@STRING, @I, 1)
IF @COUNT = 1
BEGIN
SET @LAST_NAME += @STR
SET @STR = ''
END
IF @COUNT = 2
BEGIN
SET @FIRST_NAME += @STR
SET @STR = ''
END
IF @COUNT = 3
BEGIN
SET @MIDDLE_NAME += @STR
SET @STR = ''
END
SET @I = @I +1
END
SET @SUFFIX = @STR
SELECT @FIRST_NAME AS "FIRST NAME", @LAST_NAME AS "LAST NAME", @MIDDLE_NAME
"Middle Name", @SUFFIX as "Suffix";
推荐阅读
- mongodb - Mongo DB 复杂查询
- dns - 为什么我的 dns 更改需要这么长时间才能更新?
- javascript - HTML/JS:将范围控件转换为数字输入并返回
- linux - 未知错误:找不到 Chrome 二进制文件,但它已经在 Linux 服务器的 Jenkins 文件夹中
- html - 如何在 css 中垂直居中这些表格行的内容?
- python - Django:dbbackup 显示 pg_dump:错误:命令行参数过多
- wpf - 在 Shell 中加载所有区域时打开一个对话框
- html - line-height: 1.4 是否与 line-height: 140% 相同?
- r - 使用 Dplyr - 股票数据计算组之间的百分比变化
- laravel - Laravel - softDelete设置空关系