在执行SQL 语句时,可通过条件表达式筛选出符合条件的数据。
条件表达式主要有以下几种:
CASE
CASE 表达式是条件表达式,类似于其他编程语言中的CASE 语句。
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
598
CASE 表达式的语法图请参考图6-1。
图6-1 case::=
CASE 子句可以用于合法的表达式中。condition 是一个返回BOOLEAN 数据类型的表
达式:
如果结果为真,CASE 表达式的结果就是符合该条件所对应的result。
如果结果为假,则以相同方式处理随后的WHEN 或ELSE 子句。
如果各WHEN condition 都不为真,
表达式的结果就是在ELSE 子句执行的result。
如果
省略了ELSE 子句且没有匹配的条件,结果为NULL。
示例:
gbase=# CREATE TABLE public.case_when_t1(CW_COL1 INT);
CREATE TABLE
gbase=# INSERT INTO public.case_when_t1 VALUES (1), (2), (3);
INSERT 0 3
gbase=# SELECT * FROM public.case_when_t1;
cw_col1
---------
1
2
3
(3 rows)
gbase=# SELECT CW_COL1, CASE WHEN CW_COL1=1 THEN 'one' WHEN CW_COL1=2 THEN 'two'
ELSE 'other' END FROM public.case_when_t1 ORDER BY 1;
cw_col1 | case
---------+-------
1 | one
2 | two
3 | other
(3 rows)
gbase=# DROP TABLE public.case_when_t1;
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
599
DROP TABLE
DECODE
DECODE 的语法图请参见图6-2。
图6-2 decode::=
将表达式base_expr 与后面的每个compare(n) 进行比较,
如果匹配返回相应的value(n)。
如果没有发生匹配,则返回default。
示例请参见5.24 条件表达式函数。
gbase=# SELECT DECODE('A','A',1,'B',2,0);
case
------
1
(1 row)
COALESCE
COALESCE 的语法图请参见图6-3。
图6-3 coalesce::=
COALESCE 返回它的第一个非NULL 的参数值。
如果参数都为NULL,
则返回NULL。
它常用于在显示数据时用缺省值替换NULL。和CASE 表达式一样,COALESCE 只计算用
来判断结果的参数,即在第一个非空参数右边的参数不会被计算。
示例
gbase=# CREATE TABLE public.c_tabl(description varchar(10), short_description
varchar(10), last_value varchar(10)) ;
CREATE TABLE
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
600
gbase=# INSERT INTO public.c_tabl VALUES('abc', 'efg', '123');
INSERT 0 1
gbase=# INSERT INTO public.c_tabl VALUES(NULL, 'efg', '123');
INSERT 0 1
gbase=# INSERT INTO public.c_tabl VALUES(NULL, NULL, '123');
INSERT 0 1
gbase=# SELECT description, short_description, last_value, COALESCE(description,
short_description, last_value) FROM public.c_tabl ORDER BY 1, 2, 3, 4;
description | short_description | last_value | coalesce
-------------+-------------------+------------+----------
abc
| efg
| 123
| abc
| efg
| 123
| efg
|
| 123
| 123
(3 rows)
gbase=# DROP TABLE public.c_tabl;
DROP TABLE
如果description 不为NULL ,则返回description 的值,否则计算下一个参数
short_description;如果short_description 不为NULL,则返回short_description 的值,否则计
算下一个参数last_value;
如果last_value不为NULL,
则返回last_value的值,
否则返回
(none)
。
gbase=# SELECT COALESCE(NULL,'Hello World');
coalesce
---------------
Hello World
(1 row)
NULLIF
NULLIF 的语法图请参见图6-4。
图6-4 nullif::=
只有当value1 和value2 相等时,NULLIF 才返回NULL。否则它返回value1。
示例
gbase=# CREATE TABLE public.null_if_t1 ( NI_VALUE1 VARCHAR(10),
NI_VALUE2
VARCHAR(10));
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
601
CREATE TABLE
gbase=# INSERT INTO public.null_if_t1 VALUES('abc', 'abc');
INSERT 0 1
gbase=# INSERT INTO public.null_if_t1 VALUES('abc', 'efg');
INSERT 0 1
gbase=# SELECT NI_VALUE1, NI_VALUE2, NULLIF(NI_VALUE1, NI_VALUE2) FROM
public.null_if_t1 ORDER BY 1, 2, 3;
ni_value1 | ni_value2 | nullif
-----------+-----------+--------
abc
| abc
|
abc
| efg
| abc
(2 rows)
gbase=# DROP TABLE public.null_if_t1;
DROP TABLE
如果value1 等于value2 则返回NULL,否则返回value1。
gbase=# SELECT NULLIF('Hello','Hello World');
nullif
--------
Hello
(1 row)
GREATEST(最大值)
,LEAST(最小值)
GREATEST 的语法图请参见图6-5。
图6-5 greatest::=
从一个任意数字表达式的列表里选取最大的数值。
示例:
gbase=# SELECT greatest(9000,155555,2.01);
greatest
----------
155555
(1 row)
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
602
LEAST 的语法图请参见图6-6。
图6-6 least::=
从一个任意数字表达式的列表里选取最小的数值。
以上的数字表达式必须都可以转换成一个普通的数据类型,该数据类型将是结果类型。
列表中的NULL 值将被忽略。只有所有表达式的结果都是NULL 的时候,结果才是
NULL。
gbase=# SELECT least(9000,2);
least
-------
2
(1 row)
示例请参见5.24 条件表达式函数。
NVL
NVL 的语法图请参见图6-7。
图6-7 nvl::=
如果value1 为NULL 则返回value2,如果value1 非NULL,则返回value1。
示例:
gbase=# SELECT nvl(null,1);
nvl
-----
1
(1 row)
gbase=# SELECT nvl ('Hello World' ,1);
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
603
nvl
---------------
Hello World
(1 row)