如何在SQL Server中将变量中的全名拆分为名字和姓氏



我有一个SQL Server存储过程,它使用SSIS从csv中读取数据,并在SQL Server 2008中的不同表中填充数据。

我遇到的问题是,在csv中,我有一个名为name的列,我将其传递到变量@name中,但这个名称的名字和姓氏用空格分隔。

样本值:

@name = 'sullivian white'

但是,此单个变量值必须保存到数据库中的两列下,分别命名为firstnamelast name

如何提取数据?有没有一种方法可以使用子字符串来拆分这个变量?

您可以使用子字符串和charindex

declare @name varchar(50)
set @name = 'sullivian white'
select
  substring(@name, 1, charindex(' ', @name)-1),
  substring(@name, charindex(' ', @name)+1, len(@name))

我假设姓氏只有一个实体,但名字可以有多个实体。

查询变量值:

DECLARE @Name       NVARCHAR(60)
DECLARE @LastSpace  INT
SET @Name       = 'Mary Kay Williams'
SET @LastSpace  = CHARINDEX(' ', REVERSE(@Name))
SELECT  @Name   AS FullName
    ,   SUBSTRING(@Name, 1, LEN(@Name) - @LastSpace)                AS FirstName
    ,   SUBSTRING(@Name, LEN(@Name) - @LastSpace + 1, @LastSpace)   AS LastName

查询集合:

SELECT Name,
        SUBSTRING(      Name
                    ,   1
                    ,   LEN(Name) - CHARINDEX(' ', REVERSE(Name))
                ) AS FirstName,
        SUBSTRING(      Name
                    ,   LEN(Name) - CHARINDEX(' ', REVERSE(Name)) + 1
                    ,   CHARINDEX(' ', REVERSE(Name))
                ) AS LastName
FROM
(
    SELECT 'Sullivan White'     Name UNION
    SELECT 'John Van Bergen'    Name UNION
    SELECT 'Mark Kay Williams'  Name
) Names

假设名称有三到四个空格。感谢Tek Tips ,我找到了一个解决方案

//The way to extract name depends on how much separations does the name have.
DECLARE @NOMBRE VARCHAR(50) = 'YOCASTA DE LA MOTA FERNANDEZ CAMARENA'
declare @Name varchar(50)
declare @LastName varchar(50)
SELECT 
@Name = SUBSTRING(@NOMBRE,0,CHARINDEX(' ', @NOMBRE,  CHARINDEX(' ', @NOMBRE,    CHARINDEX(' ',@NOMBRE,CHARINDEX(' ',@NOMBRE)+1) + 1) + 1))
,@LastName =  SUBSTRING(@NOMBRE,
CHARINDEX(' ', @NOMBRE,
  CHARINDEX(' ', @NOMBRE,
    CHARINDEX(' ',@NOMBRE,CHARINDEX(' ',@NOMBRE)+1) + 1) + 1),LEN(@NOMBRE))
    select @Name,@LastName

最新更新