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

时间:2011-05-23 20:10:03

标签: sql-server-2008 ssis

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

我遇到的问题是,在csv中,我有一个名为name的列,我将其传递给变量@name,但此名称的名字和名字用空格分隔。< / p>

样本值:

@name = 'sullivian white'

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

如何提取数据?有没有办法使用子字符串来拆分这个变量?

3 个答案:

答案 0 :(得分:3)

您可以使用substringcharindex

declare @name varchar(50)
set @name = 'sullivian white'

select
  substring(@name, 1, charindex(' ', @name)-1),
  substring(@name, charindex(' ', @name)+1, len(@name))

答案 1 :(得分:2)

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

查询变量值:

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

答案 2 :(得分:0)

想象一下这个名称有三个或四个空格。 感谢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