用于拆分全名的SQL Server函数

时间:2018-03-20 15:36:41

标签: sql sql-server function

我已经搜索了SO以解决我的问题,让这个函数正常运行,但我主要看到关于函数使用的解决方案而不是创建函数的解决方案。我已经创建了这个功能,这就是为什么它会读取' ALTER FUNCTION'在我的代码顶部。最终目标是解析名字,中间姓名和姓氏。

我在第一个' END'附近出现错误的语法错误关于解析FirstName的CASE语句。我很抱歉,如果这是一个如此简单的解决方案,但我无法弄清楚我错过了什么。任何有关错误识别或更清晰语法的帮助都会非常适合像我这样的初学者。

另外,第二个SET语句只是一个简单的函数(在我到达之前已经写过)CamelCases输出。

对第一条评论感到抱歉。以下是我一直使用的一些示例名称,我想将这些名称从一列拆分为3列。第一,中间和姓氏。

Carlton J Smith
Charmane Thorn
Deel S Shah
柯蒂斯布伦南
Allie F Allison
Alex Finde
Tina D Page
杰基罗素

我尝试添加两个SET语句,但它仍然在第一个CASE语句中给出了相同的语法错误。还有什么我可以提供更多的背景?感谢您的快速回复。

ALTER FUNCTION fn_clean_Name_Split (@source VARCHAR(255))  
RETURNS VARCHAR(255)  
AS  
BEGIN  
    DECLARE @target VARCHAR(255) = @source  
    DECLARE @index INT = CHARINDEX(' ',@target)

    SET @target =
        CASE
            WHEN @index <> LEN(@target)
            THEN LEFT(@target, @index)
        END AS FirstName,
        CASE    
            WHEN @index <> LEN(@target) - CHARINDEX(' ', REVERSE(@target)) + 1 
            THEN SUBSTRING(@target, @index + 1, LEN(@target) - CHARINDEX(' ', REVERSE(@target)) - @index)
        END AS MI,
        CASE
            WHEN @index <> LEN(@target) - @index + 1 
            THEN RIGHT(@target, CHARINDEX(' ', REVERSE(@target))) AS LastName,
            ELSE @target    

    SET @target = dbo.fn_standardize_CamelCase(@target)

    RETURN @target
END

1 个答案:

答案 0 :(得分:0)

评论太长了。

set用于设置单个变量的值,而不是多个变量。这很容易解决;你可以使用多个set语句。

您可以使用select设置多个变量。这是一个很好的方便。但是,您不能同时在同一语句中设置值和返回值。

你有一个功能,所以你不想要一个无论如何返回值的查询。