我有一个SQL Server存储过程,它使用SSIS从csv读取并在SQL Server 2008中的不同表中填充数据。
我遇到的问题是,在csv中,我有一个名为name
的列,我将其传递给变量@name
,但此名称的名字和名字用空格分隔。< / p>
@name = 'sullivian white'
但是,必须将此单个变量值保存到名为firstname
和last name
的两列中的数据库中。
如何提取数据?有没有办法使用子字符串来拆分这个变量?
答案 0 :(得分:3)
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