我有一个SQL Server存储过程,它使用SSIS从csv中读取数据,并在SQL Server 2008中的不同表中填充数据。
我遇到的问题是,在csv中,我有一个名为name
的列,我将其传递到变量@name
中,但这个名称的名字和姓氏用空格分隔。
样本值:
@name = 'sullivian white'
但是,此单个变量值必须保存到数据库中的两列下,分别命名为firstname
和last 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