SQL DECODE

摘要:在本教程中,您将学习如何使用 SQL DECODE() 函数将 if-then-else 逻辑添加到查询中。

SQL DECODE() 函数简介

SQL DECODE() 函数允许您将过程 if-then-else 逻辑添加到 查询中。我们来看以下示例

SELECT DECODE(1,1,'Equal');
Code language: SQL (Structured Query Language) (sql)

在此示例中,DECODE() 函数将第一个参数 (一) 与第二个参数 (也是一) 进行比较。因为第一个参数等于第二个参数,所以函数返回第三个参数(即字符串 相等)。

上面的 DECODE() 函数工作与以下 IF 语句相同

IF 1 = 1 THEN
    RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

以下示例返回 NULL,因为第一个参数不等于第二个参数。

SELECT DECODE(1,2, 'Equal');
Code language: SQL (Structured Query Language) (sql)

其工作方式与以下语句相同

IF 1 = 2 THEN
    RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

如果您想在第一个参数不等于第二个参数时指定值,请使用 DECODE() 函数的以下形式

SELECT DECODE(1,2, 'Equal', 'Not Equal');
Code language: SQL (Structured Query Language) (sql)

其工作方式与以下 IF-THEN-ELSE 语句相同

IF 1 = 2 THEN
    RETURN 'Equal';
ELSE
    RETURN 'Not Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

通常,您可以将 DECODE() 函数的第一个参数与一系列参数进行比较,如下例所示

SELECT DECODE (2, 1, 'Equal 1', 2, 'Equal 2');
Code language: SQL (Structured Query Language) (sql)

此示例充当以下 IF-THEN-ELSE IF 语句

IF 2 = 1 THEN
     RETURN 'Equal 1';
ELSE IF 2 = 2 
    RETURN 'Equal 2';
END IF;
Code language: SQL (Structured Query Language) (sql)

参见以下示例

SELECT DECODE(3,1, 'Equal 1,', 2, 'Equal 2', 'Not Equal 1 or 2');
Code language: SQL (Structured Query Language) (sql)

此示例的工作方式与以下 IF-THEN-ELSEIF-ELSE 语句相同

IF 3 = 1 THEN 
    RETURN 'Equal 1';
ELSE IF 3 =2 THEN
    RETURN 'Equal 2';
ELSE
    RETURN 'Not Equal 1 or 2';
END IF;
Code language: SQL (Structured Query Language) (sql)

SQL DECODE() 函数语法

以下说明了 SQL DECODE() 函数的语法

DECODE (e , s1, r1[, s2, r2], ...,[,sn,rn] [, d]);
Code language: SQL (Structured Query Language) (sql)

在此语法中

  • e 是要搜索或与其他参数 s1、s2、… sn 进行比较的参数。
  • s1、s2、… 或 sn 是要搜索的表达式。函数将第一个参数与 s1、s2、… sn 依次进行比较。如果任何比较 e = s1、e = s2、… e = sn 返回真,DECODE() 函数将终止评估并返回结果。
  • r1、r2、… 或 rn 是当 ei = si 时返回的结果。
  • d 是当 e 不等于任何参数 s1、s、2、… 或 sn 时返回的表达式。

SQL DECODE() 示例

我们将使用 示例数据库 中的 employees 表进行演示。

SQL DECODE: employees table

参见以下查询

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
ORDER BY DECODE('S',
        'F',
        first_name,
        'L',
        last_name,
        'S',
        salary);
Code language: SQL (Structured Query Language) (sql)

在此示例中,我们在 ORDER BY 子句中使用了 DECODE() 函数。DECODE() 函数根据输入参数返回要排序的列。在此情况下,DECODE() 函数返回工资列,因此结果集按工资列进行排序。

在本教程中,您学习了如何使用 SQL DECODE() 函数将 if-then-else 逻辑添加到查询中。

本教程是否有用?