【发布时间】:2017-03-27 04:36:38
【问题描述】:
我在两个不同的表中有一个名为“Name”的列,我想将名称分成两个不同的列,分别是“FirsrName”和“LastName” ”。我正在做的是创建一个函数并获取 First 和 Last 的值。
问题:
案例 1 - 主要问题在第一个表中,名称为“Sahil Sharma”,因此我必须根据空间拆分名称。
案例 2 - 在第二个表中,名称类似于“Sharma;Sahil”,所以我需要在 ; 的基础上拆分功能并将其反转为函数的输出,如下所示:
名字 - Sahil
姓氏 - 夏尔马
我在 CHARINDEX 和 SUBSTRINGS 方面有点初学者,虽然在阅读了 MSDN 之后,我尝试了以下代码:
---Get First Name
CREATE FUNCTION [dbo].[GetFirstName](@fullname varchar(30))
RETURNS varchar(20)
AS
BEGIN
DECLARE @name nvarchar(20)
DECLARE @result [nvarchar](30)
SET @name = @fullname
--To Check for names for CRMS
IF(CHARINDEX(';', @name) > 0)
SET @result = SUBSTRING(@name, 0, CHARINDEX(';', @name))
---To Check names for eGlobal
ELSE
SET @result = SUBSTRING(@name, 0, CHARINDEX(' ', @name))
RETURN @result
END
GO
---获取姓氏
CREATE FUNCTION [dbo].[GetLastName](@fullname varchar(30))
RETURNS varchar(20)
AS
BEGIN
DECLARE @name nvarchar(30)
DECLARE @result [nvarchar](30)
SET @name = @fullname
--To Check for names for CRMS
IF(CHARINDEX(';', @name) > 0)
SET @result = SUBSTRING(@name, CHARINDEX(';', @name) + 1, LEN(@name) - CHARINDEX(';', @name));
---To Check names for eGlobal
ELSE
SET @result = SUBSTRING(@name, CHARINDEX(' ', @name) + 1, LEN(@name) - CHARINDEX(' ', @name));
RETURN @result
END
GO
此代码不起作用,因为我认为我遗漏了一些东西。我的理解是 CHARINDEX 从字符串中搜索一个字符,SUBSTRING 可以为我检索字符串的一部分。
我在代码中所做的是使用 CHARINDEX 搜索空格 (' '),然后使用 SUBSTRING 获取它,但它不起作用。这是正确的方法还是我可以对其进行更多重构?
【问题讨论】:
标签: mysql sql-server string split