1、概述
1.1 目的
解决:求多列中的最大值、最小值问题(如:求 a、b 中最大值)
-- 若不晓得 greatest()、least(), 你可能会想到下列这种写法
SELECT decode(sign(a - b), 1, a, b) FROM dual; -- 可读性差
等价于:
SELECT greatest(a, b) FROM dual; -- 简单明了
1.2 思维导图
2、举例说明
- 数值
- 字符串
- 时间
- NULL
SELECT greatest(2, 1, 3) max_number, -- 3
least(2, 1, 3) min_number, -- 1
greatest('b', 'a', 'c') max_string, -- c
least('b', 'a', 'c') min_string, -- a
greatest(SYSDATE + 1, SYSDATE, SYSDATE + 2) max_date, -- SYSDATE + 2
least(SYSDATE + 1, SYSDATE, SYSDATE + 2) min_date, -- SYSDATE
greatest(1, NULL, 2) max_null, -- NULL
least(1, NULL, 2) min_null -- NULL
FROM dual;
3、数据类型验证
- 表达式的数据类型以第一个 exp 为准
CREATE OR REPLACE VIEW test_date_type AS (
SELECT greatest(2, '1', '3') string_to_number, -- NUMBER
LEAST('2', 1, '3') number_to_string -- VARCHAR2
FROM dual
);
SELECT t.column_name,
t.data_type
FROM user_tab_columns t
WHERE t.table_name = upper('test_date_type');
输出结果: