首页 > 解决方案 > 满足条件后追加字符串的函数

问题描述

我正在尝试在 SQL Server 中编写标量值函数,并且我想在满足条件后附加一个字符串。

如果列 gdpr_aj = 'a' 那么我需要在列 gdpr_sa = 'a' 时附加一个字符串'aj' 然后我需要在列 gdpr_vs = 'a' 时附加一个字符串'sa' 然后我需要附加一个字符串'vs '。

Example data
id   |   gdpr_aj   |   gdpr_sa   |   gdpr_vs   |
1    |     'a'     |      'a'    |     'n'     |
2    |     'n'     |      'n'    |     'a'     |
3    |     'n'     |      'n'    |     'n'     |
4    |     'a'     |      'a'    |     'a'     |

所需的结果集应该是

first row @myString = 'aj,sa'
second row @myString = 'vs'
third row @myString = ''
fourth row @myString = 'aj,sa,vs'

我的功能现在看起来像这样

alter function dbo.fn_test (@id as int)
returns varchar(max)
as
begin

declare @myString varchar(max)

declare
@gdpr_aj char(1),
@gdpr_sa char(1),
@gdpr_vs char(1)
select
@gdpr_aj = sz.gdpr_aj,
@gdpr_sa = sz.gdpr_sa,
@gdpr_vs = sz.gdpr_vs
from dbo.sz sz where sz.id = @id


if @gdpr_aj = 'a' set @myString = 'aj,'
if @gdpr_sa = 'a' set @myString = 'sa,'
if @gdpr_vs = 'a' set @myString = 'vs'

return @myString

end

标签: sqlsql-server

解决方案


试试下面的代码,如果任何字段匹配,您总是将@myString 设置为新值。

    CREATE FUNCTION dbo.fn_test (@id AS INT)
    RETURNS NVARCHAR(max)
    AS
    BEGIN
        DECLARE @output NVARCHAR(10)
    
        SELECT @output = CONCAT (
                IIF(gdpr_aj = 'a', 'aj,', '')
                ,IIF(gdpr_sa = 'a', 'sa,', '')
                ,IIF(gdpr_vs = 'a', 'vs', '')
                )
        FROM data
        WHERE id = @id
    
        --SELECT @output
        RETURN @output
    END

   SELECT dbo.fn_test(4)

推荐阅读