mysql两个日期的差去掉非工作时间_mysql – 选择最早的两个可以为空的日期

在具有两个可为空的日期/日期时间列的表中,您如何有效地选择最早的两个非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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值