sql-server - 将个人姓名分成不同的列
问题描述
我有一张名为#MyNames 的表。该表在一列中包含人的全名(姓名空间姓氏)。在这一列中,我们可以用空格将姓名与姓氏区分开来。从左侧我们有名字,在空格之后我们有姓氏。下面你可以看到表格:
所以我的意图是将这个名为 MyFullName 的列分成两个单独的列,分别称为 ,,FirstName" 和 ,,LastName''。为了做到这一点,我尝试使用以下代码:
SELECT LEFT(MyFullName,charindex(' ', MyFullName) - 1) AS FirstName, RIGHT(MyFullName,charindex(' ', MyFullName)-1 ) AS LastName
from #MyNames
此代码的输出不好,我的结果如下表:
那么任何人都可以帮助我如何修复此代码并正确获得结果并在一列中有第一个名字,在另一列中有第二个名字吗?
解决方案
显然,姓氏条款无法正常工作。
而不是使用RIGHT(MyFullName,charindex(' ', MyFullName)-1 )
考虑SUBSTRING(MyFullName,charindex(' ', MyFullName) + 1, 100)
(或任何字段长度)。
更好的方法(虽然不太容易阅读 imo)是用空白 '' 字符替换名字组件。
STUFF(MyFullName,1,charindex(' ', MyFullName),'')
这些都应该工作
SELECT LEFT(MyFullName,charindex(' ', MyFullName)-1) AS FirstName,
SUBSTRING(MyFullName,charindex(' ', MyFullName)+1, 100) AS LastName
from #MyNames
SELECT LEFT(MyFullName,charindex(' ', MyFullName)-1) AS FirstName,
STUFF(MyFullName,1,charindex(' ', MyFullName),'') AS LastName
from #MyNames
推荐阅读
- java - JavaFX:为什么拖动的图像尺寸小于原始尺寸?
- kubernetes - 防止创建已存在的机密
- rust - 如何从 Vec 写入文件
? - java - 如何在没有 Room 的情况下通过回调在后台从 SQLite 获取数据?
- java - 多节点集群中的 SparkJob:WARN TaskSetManager:在阶段 0.0 中丢失任务 0.0:java.io.FileNotFoundException
- .net - ServiceStack Redis 重试超时异常
- python - 更新 scikit 模型,使其与最新版本兼容
- python - 为什么我的 for 循环中的列表没有清空?它不应该清空我的清单吗?
- power-automate - 有没有办法使用 Office 脚本将 Outlook 电子邮件的“正文”作为字符串而不是 HTML 返回?
- python - Matplotlib 轴仅具有 Pandas Dataframe 上的值