CREATE FUNCTION 语句的格式

问题描述 投票:0回答:1

我创建了以下

CREATE FUNCTION
声明:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION dbo.GelLastName 
(
    -- Add the parameters for the function here
    @FullName NCHAR(100)
)
RETURNS NCHAR(100)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @LastName NCHAR(100)
    DECLARE @CommaPosition INTEGER


    -- Add the T-SQL statements to compute the return value here
    SET @CommaPosition = PATINDEX('%,%',@FullName)
    CASE @CommaPosition
        WHEN 0 THEN
            SET @LastName = TRIM(UPPER(LEFT(@FullName,1))+LOWER(RIGHT(@FullName,LEN(@FullName)-1)))
        ELSE
            SET @LastName = TRIM(UPPER(LEFT(LEFT(@FullName,@CommaPosition-1),1))+LOWER(RIGHT(LEFT(@FullName,@CommaPosition-1),LEN(LEFT(@FullName,@CommaPosition-1))-1)))
    END

    -- Return the result of the function
    RETURN @LastName

END
GO

尝试运行该语句时出现几个错误(实际上第一个错误甚至在语句运行之前):

  • 语法错误:“CREATE FUNCTION”必须是批处理中的唯一语句。
  • 关键字“CASE”附近的语法不正确。
  • 关键字“ELSE”附近的语法不正确。
  • 关键字“RETURN”附近的语法不正确。
  • 关键字“END”附近的语法不正确(这指的是第二个 END 语句)。

我不确定我做错了什么,但我确信我犯了一些语法错误。

sql sql-server t-sql stored-functions create-function
1个回答
0
投票

我使用了 SQL 2022 的语法(!!!) 有一个函数 string_Split 可以在逗号上分割字符串

提供了 2 个仅包含姓氏的字符串和包含first、last 组合的字符串示例 这是我的理解和您的要求

 CREATE or ALTER FUNCTION dbo.GelLastName 
(
    -- Add the parameters for the function here
    @FullName NCHAR(100)
)
RETURNS NCHAR(100)
AS
BEGIN
 -- Declare the return variable here
    DECLARE @LastName NCHAR(100)
    DECLARE @CommaPosition INTEGER
    
    -- Add the T-SQL statements to compute the return value here
    SET @CommaPosition = PATINDEX('%,%',@FullName)
        
    SELECT TOP (1) @LastName = val 
    FROM (
        SELECT 
        rn = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), 
        val = RTrim(LTRIM(value)) 
        from string_split(@FullName, ',')
    ) c order by c.rn desc

RETURN Upper(substring(@LastName, 1,1)) + Lower(Substring(@lastName, 2, Len(@lastName)))

END
GO

select dbo.GelLastName('indigo, Montoya')
select dbo.GelLastName('montoya')
© www.soinside.com 2019 - 2024. All rights reserved.