函数的作用是:返回一个非空值

n1bvdmb6  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(471)

我有5列带有日期(col1,col2,col3,col4,col5),其中一些是空的或者是空的。我需要从所有这些列中找到一个最小日期。
我使用的是“最小”函数,它的工作很好,但是如果我有一列带有日期,而其他列是空的,“最小”将返回给我空字段!
如何跳过空字段或空列,只返回日期!或者在使用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
oiopk7p5

oiopk7p51#

使用 COALESCE 要忽略的函数 NULL 价值观
更新-包括最小和最大日期-还检查空日期或空日期

select Id, least(COALESCE(IFNULL(vi_date1,''), '9999-12-31 23:59:59') , 
                   COALESCE(IFNULL(vi_date2,''),'9999-12-31 23:59:59'),
                   COALESCE(IFNULL(vi_date3,''),'9999-12-31 23:59:59'),
                   COALESCE(IFNULL(vi_date4,''),'9999-12-31 23:59:59'),
                   COALESCE(IFNULL(vi_date5,''),'9999-12-31 23:59:59')) as "Min Date", 
          , GREATEST(COALESCE(IFNULL(vi_date1,''), '1000-01-01 00:00:00') , 
                   COALESCE(IFNULL(vi_date2,''),'1000-01-01 00:00:00'),
                   COALESCE(IFNULL(vi_date3,''),'1000-01-01 00:00:00'),
                   COALESCE(IFNULL(vi_date4,''),'1000-01-01 00:00:00'),
                   COALESCE(IFNULL(vi_date5,''),'1000-01-01 00:00:00')) as "Max Date", 
          vi_date1, vi_date2,vi_date3,vi_date4,vi_date5 
          vi_date1, vi_date2,vi_date3,vi_date4,vi_date5 
 from table
js5cn81o

js5cn81o2#

就用这个 IF(col <> '', col, '...') 要将空字符串和空字符串转换为大(或小)值,请使用最小(或最大)函数:

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

小提琴

相关问题