【问题标题】:How to conditionally assign values in SQL using case如何在 SQL 中使用 case 有条件地赋值
【发布时间】:2019-02-15 10:22:59
【问题描述】:

我想根据一系列条件为变量赋值。我可以使用 IF/ELSE 执行此操作,如下代码所示:

DECLARE @param1 VARCHAR(100) = 'value1';
DECLARE @param2 AS Varchar (25) = 'value2';
DECLARE @param3 AS Varchar (25) = 'value3';
DECLARE @param4 AS Varchar(25) = 'value4';

SELECT @param1 = @param1 + '_' + @param2;
BEGIN
    IF LEN(@param3) > 0 AND LEN(@param4) > 0
       SELECT @param1= @param1+ '_' + @param3 + '_' + @param4;
    ELSE
    IF LEN(@param3) > 0
       SELECT @param1= @param1+ '_' + @param3;
    ELSE IF LEN(@param4) > 0
    SELECT @param1= @param1 + '_' + @param4;
END

我想用 CASE、WHEN/THEN 替换 IF/ELSE。类似于:

SELECT CASE 
    WHEN LEN(@param3) > 0 AND LEN(@param4) > 0 THEN  
        @param1 = @param1 + '_' + @param2 + '_' + @param3 + '_' + @param4
    WHEN LEN(@param3) > 0 AND LEN(@param4) <= 0 THEN  
        @param1 = @param1 + '_' + @param2 + '_' + @param3
    WHEN LEN(@param3) <= 0 AND LEN(@param4) > 0 THEN 
        @param1 = @param1 + '_' + @param2 + '_' + @param4
    ELSE @param1 = @param1 + '_' + @param2

【问题讨论】:

    标签: sql sql-server tsql plsql


    【解决方案1】:

    CASE 子句是一个返回值的表达式。所以你不能在CASE 中做任务。但是您可以将CASE 的结果分配给一个变量。

    SELECT @param1 = CASE 
        WHEN LEN(@param3) > 0 AND LEN(@param4) > 0 THEN  
            @param1 + '_' + @param2 + '_' + @param3 + '_' + @param4
        WHEN LEN(@param3) > 0 AND LEN(@param4) <= 0 THEN  
            @param1 + '_' + @param2 + '_' + @param3
        WHEN LEN(@param3) <= 0 AND LEN(@param4) > 0 THEN 
            @param1 + '_' + @param2 + '_' + @param4
        ELSE 
            @param1 + '_' + @param2
        END
    

    【讨论】:

    • 这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多