【问题标题】:Add a condition to a table-valued function向表值函数添加条件
【发布时间】:2019-09-13 05:54:56
【问题描述】:

我创建了这个函数,将投资者的姓名分为第一名、中间名和最后一名。但是我想添加一个条件,如果中间名没有空格,则在单独的列中显示数字 0,如果有空格,则显示数字 1,我该怎么做?

这是我已经创建的函数:

ALTER function [dbo].[saveinvestornames]()
returns @investorsname table ( investor_name nvarchar(300),first_name nvarchar(300), middle_name nvarchar(300),last_name nvarchar(300) )
as
begin
    insert into @investorsname
        select 
            investor_name,    
            SUBSTRING(investor_name, CHARINDEX(', ', investor_name) + 2, CASE WHEN CHARINDEX(' ', investor_name, CHARINDEX(', ', investor_name) + 2) = 0 THEN LEN(investor_name) + 1 ELSE CHARINDEX(' ', investor_name, CHARINDEX(', ', investor_name) + 2) END - CHARINDEX(', ', investor_name) - 2)as FirstName,            
            RTRIM(LTRIM(REPLACE(REPLACE(investor_name,SUBSTRING(investor_name , 1, CHARINDEX(' ', investor_name) -1),''),REVERSE( LEFT( REVERSE(investor_name), CHARINDEX(' ', REVERSE(investor_name))-1 ) ),'')))as MiddleName,    
            right(investor_name, CHARINDEX(' ', REVERSE(investor_name))) as LastName
        from investornames;

    return;
end;

【问题讨论】:

    标签: sql sql-server sql-server-2017


    【解决方案1】:

    只需将您的程序更改为:

    ALTER function [dbo].[saveinvestornames]()
    returns @investorsname table ( investor_name nvarchar(300),first_name nvarchar(300), middle_name nvarchar(300),last_name nvarchar(300), middleNameSpace bit )
    as
    begin
        insert into @investorsname
            select first_name, middle_name, last_name,
                   case when len(middle_name) - len(replace(middle_name, ' ', '')) = 0 then 0 else 1 end
            from (
                select 
                    investor_name,    
                    SUBSTRING(investor_name, CHARINDEX(', ', investor_name) + 2, CASE WHEN CHARINDEX(' ', investor_name, CHARINDEX(', ', investor_name) + 2) = 0 THEN LEN(investor_name) + 1 ELSE CHARINDEX(' ', investor_name, CHARINDEX(', ', investor_name) + 2) END - CHARINDEX(', ', investor_name) - 2)as FirstName,            
                    RTRIM(LTRIM(REPLACE(REPLACE(investor_name,SUBSTRING(investor_name , 1, CHARINDEX(' ', investor_name) -1),''),REVERSE( LEFT( REVERSE(investor_name), CHARINDEX(' ', REVERSE(investor_name))-1 ) ),'')))as MiddleName,    
                    right(investor_name, CHARINDEX(' ', REVERSE(investor_name))) as LastName
                from investornames;
            ) a
        return;
    end;
    

    它只是检查middle_name 中有多少空格,方法是在替换其中的空格后比较该列的长度。

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 2023-03-30
      • 2012-05-12
      相关资源
      最近更新 更多