我正在尝试检索存储在一行中任意三列中的最新日期。
当所有三个日期都不是 NULL
时,此查询工作正常:
SELECT GREATEST(date_A, date_B, date_C) FROM mytable
但是当这些值中的任何一个为 NULL
时,GREATEST
returns NULL
.
解决这个问题的方法是使用:
SELECT GREATEST(
COALESCE(date_A, '1000-01-01'),
COALESCE(date_B, '1000-01-01'),
COALESCE(date_C, '1000-01-01')
) FROM mytable
这是有效的,因为 '1000-01-01' is the minimum value of the DATE
datatype .然而,为了便于阅读,我更愿意用 MIN_VALUE
函数或常量来表达查询。
MySQL中有这样的东西吗?
最佳答案
MySQL 中没有这样的函数或常量。最明显的是 MAXINT,但即使这样也不可用。
如果可能的话,我的建议是,如评论中所述,不允许列中有 NULL 值。而是对 0000-00-00
日期使用 MySQL 的零值,并且将按预期使用 GREATEST
和 LEAST
:
mysql> SELECT GREATEST ('2015-01-01', '2041-11-13', '1844-05-30', '0000-00-00');
+-------------------------------------------------------------------+
| GREATEST ('2015-01-01', '2041-11-13', '1844-05-30', '0000-00-00') |
+-------------------------------------------------------------------+
| 2041-11-13 |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT LEAST ('2015-01-01', '2041-11-13', '1844-05-30', '0000-00-00');
+----------------------------------------------------------------+
| LEAST ('2015-01-01', '2041-11-13', '1844-05-30', '0000-00-00') |
+----------------------------------------------------------------+
| 0000-00-00 |
+----------------------------------------------------------------+
1 row in set (0.00 sec)
关于mysql - 有没有办法在 MySQL 中检索数据类型的最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863689/