SQL中 decode函数简介

介绍

decode()SQL中非常强大的条件表达式函数之一。它被广泛用于在查询中测试和显示一个字段的不同值。decode()函数本质上是一个语言结构,它接受若干个条件和结果,对于输入数据的每一个值,按照顺序依次判断是否满足条件,如果满足,则返回对应的结果。

语法

decode() 函数的语法如下:

decode( expression ,search ,result [, search ,result]... [, default] )

参数:

  • expression:需要测试的表达式或字段,不能为 null
  • search:选择一个值来测试 expression 的值,不能为 null
  • result:如果 expression 的值与 search 的值相等,则返回的结果。result 可以是任意的数据类型,包括 null
  • default:可选的。如果所有的选择都不满足,则返回此项的值。

示例1:

例如,下面的示例演示了如何使用 decode() 函数来将一个字段的值翻译成英文:

SELECT name, decode(gender, 'M', 'Male', 'F', 'Female', 'Unknown') as new_gender FROM employees;

结果如下:

name new_gender
Tom Male
Alice Female
John Unknown
Mary Female
Bill Male
Michael Male
Jennifer Female
Tim Unknown

在这个例子中,我们已经使用 decode() 函数做了以下事情:

  • 检查 gender 列的值。
  • 如果它是 M,则该函数返回 Male
  • 如果它是 F,则该函数返回 Female
  • 如果它是其他任何内容,则该函数返回 Unknown
  • 结果存储在一个名为 new_gender 的新列中。

示例2:

下面是另一个示例,它展示了如何使用 decode() 函数,检查不同日期之间的时间差:

SELECT decode((sysdate - hire_date) > 1825, 1, 'Yes', 0, 'No') as five_years FROM employees;

结果如下:

five_years
Yes
No
Yes
No
Yes
Yes
Yes
No

在这个例子中,我们已经使用 decode() 函数做了以下事情:

  • 检查一个员工与公司续约是否超过了五年。
  • 如果超过了五年,则该函数返回 Yes
  • 如果没有超过五年,则该函数返回 No
  • 结果存储在一个名为 five_years 的新列中。

总结

decode() 函数是 SQL 中非常强大的一个函数,可以用于实现很多复杂的条件语句。在使用时,需要注意:

  • 参数expressionsearch以及result之间的数目必须一致;
  • 在没有匹配的情况下,如果没有默认返回值,该函数将返回 null
  • decode() 函数只能在 Oracle 数据库中使用,如果在其他数据库中使用相似的功能,请使用 CASE 表达式。
营销型网站