GREATEST(expr_1, expr_2, …expr_n)函数从表达式(列、常量、计算值)expr_1, expr_2, … expr_n等中找出最大的数返回。在比较时,OracIe会自动按表达式的数据类型进行比较,以expr_1的数据类型为准。
1:expr_1为数值型。按大小进行比较,查出16
SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;
2:expr_1为字符型。按首字母进行比较(如果相等则向下比较)
全部为字符型,取出最大值G:
SELECT GREATEST('A', 'B', 'C', 'D', 'E', 'F','G') A FROM DUAL;
3:expr_1为时间类型。全部为时间类型:最大时间
SELECTGREATEST(sysdate,TO_DATE('2014-08-01','YYYY-MM-DD')) A FROM DUAL;
4:只要GREATEST的expr有一个为NULL,都会返回NULL。
expr_1为NULL时:返回-
SELECT GREATEST(NULL, 'B', 'C', 'D', 'E','GA', 'GAB') A FROM DUAL;
expr_1不为NULL时,其它的expr为NULL时:返回-
SELECT GREATEST('A', 'B', 'C', 'D', 'E',NULL, 'GAB') A FROM DUAL;
注意比较时,要类型一致才可以比较。
https://blog.csdn.net/liangweiwei130/article/details/36384145
GREATEST(value1, value2, …);
LEAST(value1,value2,…);
如果任何参数为NULL,则两个函数都将立即返回NULL,而不进行任何比较。
如果在INT或REAL上下文中使用函数,或者所有参数都是整数值或REAL值,那么它们将分别作为INT和REAL来比较。
如果参数由数字和字符串组成,则函数将它们作为数字进行比较。
如果至少一个参数是非二进制(字符)字符串,则函数将将参数作为非二进制字符串进行比较。 在所有其他情况下,函数将参数作为二进制字符串进行比较
可以结合ifnull
INSERT INTO revenues(company_id,q1,q2,q3,q4)
VALUES (3,100,120,110,null);
eg
SELECT
company_id,
LEAST(IFNULL(q1, 0),
IFNULL(q2, 0),
IFNULL(q3, 0),
IFNULL(q4, 0)) low,
GREATEST(IFNULL(q1, 0),
IFNULL(q2, 0),
IFNULL(q3, 0),
IFNULL(q4, 0)) high
FROM
revenues;
end
+------------+--------+--------+
| company_id | low | high |
+------------+--------+--------+
| 1 | 100.00 | 130.00 |
| 2 | 250.00 | 310.00 |
| 3 | 0.00 | 120.00 |
+------------+--------+--------+
3 rows in set