在具有两个可为空的日期/日期时间列的表中,您如何有效地选择最早的两个非NULL日期?
具体来说,这是我感兴趣的:
| Date1 | Date2 | | Expected |
|------------|------------| |------------|
| 2014-02-23 | 2014-01-16 | | 2014-01-16 |
| 2014-02-01 | NULL | | 2014-02-01 |
| NULL | 2014-01-13 | | 2014-01-13 |
| NULL | NULL | | NULL |
我可以使用以下任一查询设法获取这些结果.我的解决方案都使用LEAST运算符,当任一参数为NULL(并且两者都为NULL时)时返回NULL,因此需要更多逻辑才能完成工作.
SELECT IF(ISNULL(Date1), Date2, IFNULL(LEAST(Date1, Date2), Date1)) AS EarlyDate FROM MyTable
或等效的:
SELECT IFNULL(IFNULL(LEAST(Date1, Date2), Date1), Date2) AS EarlyDate FROM MyTable
我的感觉是,我上面的两个查询都有一些冗余.有谁能建议更好的解决方案?
解决方法:
你必须检查NULL,试试这个:
SELECT IF(Date1 IS NULL OR Date2 IS NULL,
COALESCE(DATE1, DATE2),
LEAST(DATE1, DATE2)
) AS EarlyDate
FROM MyTable
标签:sql,mysql,datetime
来源: https://codeday.me/bug/20190825/1716313.html