mysql - 使 LEAST() 函数返回非空值

标签 mysql sql database date

我有 5 列日期(col1、col2、col3、col4、col5),其中一些为空或为 null。 我需要从所有这些列中找到一个最短日期。

我正在使用“least”函数,它工作正常,但如果我有一列包含日期而其他列为空,则“least”将返回给我空字段!

如何跳过空字段或空列,并仅返回日期!或者我需要在使用最少功能之前检查每一列是否为空! 谢谢!

select id, least(vi_date1, vi_date2,vi_date3,vi_date4,vi_date5) as "Min Date", vi_date1, vi_date2,vi_date3,vi_date4,vi_date5 from table

最佳答案

只需使用 IF(col <> '', col, '...')将 NULL 和空字符串转换为大(或小)值,然后使用 LEAST(或 GREATEST)函数:

SELECT
    NULLIF(LEAST(
        IF(vi_date1 <> '', vi_date1, '9999-12-31'),
        IF(vi_date2 <> '', vi_date2, '9999-12-31'),
        IF(vi_date3 <> '', vi_date3, '9999-12-31'),
        IF(vi_date4 <> '', vi_date4, '9999-12-31'),
        IF(vi_date5 <> '', vi_date5, '9999-12-31')
    ),'9999-12-31') AS Min_Date,
    NULLIF(GREATEST(
        IF(vi_date1 <> '', vi_date1, '1000-01-01'),
        IF(vi_date2 <> '', vi_date2, '1000-01-01'),
        IF(vi_date3 <> '', vi_date3, '1000-01-01'),
        IF(vi_date4 <> '', vi_date4, '1000-01-01'),
        IF(vi_date5 <> '', vi_date5, '1000-01-01')
    ),'1000-01-01') AS Max_Date,
    vi_date1,
    vi_date2,
    vi_date3,
    vi_date4,
    vi_date5
FROM testdata

DB Fiddle

关于mysql - 使 LEAST() 函数返回非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51311594/

相关文章:

MySQL:分组

sql - 在大表查询中获取计数匹配非常慢

mysql - 查询中的 Pentaho Report Designer 错误

mysql数据库拒绝删除

MySQL 更新一个不同的数字

php - 由于点符号,无法在查询中指定我的表名

mysql - Upsert 用于组合不是主键的外键

sql - 哪里是设置 NOCOUNT 的最佳位置?

sql - NOT IN() 的替代方法

java - @ManyToOne 与连接表的关系(nullable = false)