Oracle 多列最值函数 greatest()、least()

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');

输出结果:
在这里插入图片描述

发布了43 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_34745941/article/details/102482720