当前位置: 首页 > 知识库问答 >
问题:

将全名拆分为第一个中间最后一个和后缀SQL

秦学林
2023-03-14

我试图解析全名,将其读作名字、中间名、姓氏和后缀。我已经尝试了半段SQL代码,但我需要帮助根据以下逻辑获取后缀。

如果没有后缀,则留下字段NULL如果没有中间名,则留下字段NULL

,Ltrim(子字符串(名称,1,Isnull(Nullif(CHARINDEX(“”,NAME),0),1000))作为FirstName,Ltrim(子字符串(名称,CHARINDEX(“”,NAME),CASE WHEN(CHARINDEX(“”,NAME,CHARINDEX(“”,NAME)1)-CHARINDEX(“”,NAME))

,Ltrim(SUBSTRING(NAME, 
Isnull(Nullif(CHARINDEX(' ', NAME, Charindex(' ', NAME) + 1), 0), CHARINDEX(' ', NAME)), CASE 
            WHEN Charindex(' ', NAME) = 0
                THEN 0
            ELSE LEN(NAME)
            END)) AS LastName   
Thanks in advance


Example: 

an example of the full name is Alexander BC Brendel Jr , The desired outcome would be First - Alexander Middle - BC Last - Brendel Suffix - Jr 


|HdrName                |FirstName |MiddleName  |LastName   |Suffix|
|--------               |--------- |----------- |---------- |------|
|Alexander BC Brendel Jr|Alexander |BC          |Brendel    |Jr    |
|Thomas J Abraham  Sr   |Thomas    |J           |Abraham    |Sr    |

共有1个答案

纪晨
2023-03-14

如果HdrName列的格式是恒定的,完全由四个部分组成,那么你很幸运——SQL服务器中有一个特殊的功能完全适合你的情况:

DECLARE @Names TABLE (HdrName VARCHAR(100));
INSERT INTO @Names VALUES ('Alexander BC Brendel Jr'), ('Thomas J Abraham Sr');

WITH PreparedNames AS 
(
    SELECT 
        HdrName,
        FullName = REPLACE(HdrName, ' ', '.')
    FROM
        @Names
)
SELECT
    HdrName     ,
    Suffix      =   PARSENAME(FullName, 1),
    FirstName   =   PARSENAME(FullName, 4),
    MiddleName  =   PARSENAME(FullName, 3),
    LastName    =   PARSENAME(FullName, 2)
FROM
    PreparedNames;

PARSENAME函数用于解析由四部分组成的SQL Server对象的名称,但是,如果要将名称中的空格替换为点,则可以将名称解析为SQL Server对象。

 类似资料:
  • 问题内容: 我发布此消息是因为该主题刚刚在另一个问题/答案中提出,并且该行为没有得到很好的记录。 考虑数据框 我想获取由column定义的每个组的第一行和最后一行。 我试过了 但是,这并没有给我我所期望的。 如何获得每个组中的实际第一个和最后一个值? 问题答案: 一种选择是使用该方法: 但是,我还没有找到一种将它们整齐地聚合的方法。当然,总是可以使用构造函数: 注意:我明确使用了该属性,否则您必须

  • 问题内容: 我正在使用String split方法,并且我想拥有最后一个元素。数组的大小可以更改。 例: 我想分割上面的字符串并得到最后一个项目: 我不知道在运行时数组的大小:( 问题答案: 将数组保存在局部变量中,并使用数组的字段查找其长度。减去1以说明它是基于0的: 注意:如果原始字符串仅由分隔符组成,例如或,则为0,这将引发ArrayIndexOutOfBoundsException。示例:

  • 我有一个名字列表,我想把一个人名字中的第一个和最后一个单词分开。 我试图使用“trim”功能,但没有成功。 有人能解释一下我是怎么做到的吗? 表: 因此,我想要: 谢谢

  • 我使用的是Apache Spark,它的数据帧如下所示: 我想按字段分组,以获得的所有历元时间戳。然后我想按时间戳升序对历代进行排序,然后取第一个和最后一个历代。 我使用了下面的查询,但是和历元值似乎是按照它们在原始数据帧中出现的顺序获取的。我想把第一个和最后一个从一个有序的升序中取出来。 如何从按升序历元排序的历元列表中检索第一个和最后一个历元?

  • 问题内容: 我有以下形式的查询: 我很难确定上个季度的正确日期。因此,假设当前日期是 7月1日 ,即第三季度,我想将 4月1日 作为FIRST,将 6月30日 作为最后 一个季度 (即第二季度)的最后一天。 谷歌搜索了一下,找到了很多解决方案,但是每个解决方案都涵盖了SQL Server和可用的时髦方法,在我们的ORACLE数据库(Oracle 10g和11g)上不可用。 哦,是的,我还需要能够将

  • 例如,从下面的代码 这只是一个示例数据集,我有一个包含6000行的数据框,我想找到每列的第一个和最后一个值,其中我还有作为值。我也不知道我的第一个值或最后一个值的索引。 我试过了 很少有人来自Link1,Link2,但没有任何成功。我还想得到第一个元素,而不是最小值。