sql - Oracle SQL - 选择 3 个日期中最早的日期,但忽略 NULL
问题描述
我有这个 Oracle SQL 语句来获取 3 个日期中最早的一个:
SELECT LEAST(DATE_1,DATE_2,DATE_3) FROM MYTABLE
但是,如果其中一个日期为 NULL,则整个 LEAST 函数将返回 NULL,而不管其他日期是否不为 NULL。我想获得三个日期中最旧的日期,但忽略任何 NULL 日期,以便 LEAST 返回 NULL 的唯一时间是所有三个日期都为 NULL 的情况。
我也不能让函数返回不正确的日期,所以这不起作用:
SELECT LEAST(NVL(DATE_1,SYSDATE),NVL(DATE_2,SYSDATE),NVL(DATE_3,SYSDATE)) FROM MYTABLE
最干净的方法是什么?
解决方案
这是一种方法:
SELECT LEAST(COALESCE(DATE_1, DATE_2, DATE_3),
COALESCE(DATE_2, DATE_1, DATE_3),
COALESCE(DATE_3, DATE_2, DATE_1)
)
FROM MYTABLE
推荐阅读
- ruby-on-rails - 如何将图像迁移到 Rails 中的新字段?
- java - 我如何知道父上下文中匹配的替代方案?
- text-mining - 如何解决下载fasttext-model300的问题?
- function - 具有实时数据的线性函数
- css - 响应式菜单问题(XML 和 ASP 菜单)
- flutter - 如何正确将 Home.dart 的 home 属性添加到 main.dart?
- unix - 在文件末尾搜索和放置文本
- user-interface - UI automator Viewer - 无法在 UI XML Dump 中选择文件
- java - Java 数据库并发
- node.js - 为什么我在更新路由/blogs/:id(使用mongod)的Blog.update()函数中得到这个CastError?