comparison with NULL date gives NULL value in SQL Server

80 Views Asked by At

This code results in NULL. sale_jan_dt and sale_feb_dt both datetime columns.

s.sale_feb_dt = 2022-09-01 01:19:00.000
s.sale_jan_dt = NULL

select
    case 
        when s.sale_jan_dt >= s.sale_feb_dt
            then cast(convert(char(20), s.sale_feb_dt, 20) as datetime)             
        else
            cast(convert(char(20), s.sale_jan_dt, 20) as datetime) 
    end as min_sales_month
from sales s

Would this code return a datetime value or string? I have to use the min_sales_month in date calculations.

select
    case 
        when isnull(s.sale_jan_dt, '2100-12-31 23:59:59') >= s.sale_feb_dt
            then cast(convert(char(20), s.sale_feb_dt, 20) as datetime) 
            else cast(convert(char(20), s.sale_jan_dt, 20) as datetime) 
    end as min_sales_month
from 
    sales s
1

There are 1 best solutions below

3
markalex On BEST ANSWER

You can change comparison, swap result, and I believe you'll get what you want.

select
    case 
        when s.sale_jan_dt >= s.sale_feb_dt or s.sale_jan_dt is null
            then cast(convert(char(20), s.sale_feb_dt, 20) as datetime)             
        else
            cast(convert(char(20), s.sale_jan_dt, 20) as datetime) 
    end as min_sales_month
from sales s