sql - 在 SELECT 语句中将名称拆分为多个部分
问题描述
我似乎找不到关于将字符串拆分为我需要的部分的现有帖子。我在 SQL Server 中有一个数据库字段,其中包含“LastName FirstName MI”(没有逗号,只是分隔人名每个部分的空格)。我有以下 SQL 来获取名字和姓氏,但不知道如何获取中间名或中间名。
前任。能源部约翰 B
SELECT
RTRIM(LEFT([PATIENT_NAME], CHARINDEX(' ', [PATIENT_NAME]))) AS LastName,
SUBSTRING([PATIENT_NAME], CHARINDEX(' ', [PATIENT_NAME]) + 1, LEN([PATIENT_NAME])) AS FirstName
FROM
Clients
结果是:
- 名字 = 约翰 B
- 姓氏 = 母鹿
如何在此SELECT
语句中仅返回没有中间名首字母的名字并从该字符串中获取“B”作为中间名?
解决方案
您可以取正确的 1 个字符,也可以将字符串反转为取第一个字符。
SELECT RIGHT(LTRIM(RTRIM([Patient_Name])), 1) AS Middle_Initial
SELECT LEFT(REVERSE(LTRIM(RTRIM([Patient_Name]))), 1) AS Middle_Initial
至于从你的名字字符串中删除 MI,我会找到字符串的长度并取左边的 N-2 个字符,或者我会对空间进行字符索引,然后取那么多字符。把它们放在一起:
DECLARE @name VARCHAR(100) = 'Smith David M '
--Clean the string of leading/trailing whitespace
SELECT LTRIM(RTRIM(@name)) AS name_cleaned
--Find the first space to parse out the last name
SELECT CHARINDEX(' ', @name) AS first_space
--Select all chars before the first space
SELECT LEFT(LTRIM(RTRIM(@name)), CHARINDEX(' ', @name)-1) AS last_name
--Find the next space, use the starting location as the previous space and add 1
SELECT CHARINDEX(' ', @name, 7) AS second_space
--Select all chars between the spaces
SELECT SUBSTRING(@name, CHARINDEX(' ', @name)+1, CHARINDEX(' ', @name, 7) - CHARINDEX(' ', @name)) AS first_name
--Select the right most char for middle initial
SELECT RIGHT(LTRIM(RTRIM(@name)), 1) AS middle
推荐阅读
- javascript - 如何在 Chrome 扩展中使用 Javascript 触发 HTML 元素文本的更改事件?
- javascript - Nuxtjs:如何将 HttpOnly Cookies 用于 Nuxt-Auth 策略
- java - Java - JNA - User32.INSTANCE.GetLayeredWindowAttributes 返回错误的透明度值
- python - python pandas histogram 显示 qcut 的分箱范围
- java - 如何根据一组随机生成的字母验证输入。还有,如何建立查房系统
- javascript - 在事件中反应颜色背景
- javascript - 为每 3 个项目 Vue.js 创建新行
- android - Opengl es 2.0片段着色器中有没有办法获得以前的片段颜色
- c# - 如何在剑道网格中同时启用 autoFitColumn() 和水平滚动?
- r - 使用 RSelenium 在多个页面上抓取网页并使用正则表达式选择电子邮件