DATEDIFF - Replace NULL with NOW()

↘锁芯ラ 提交于 2019-12-11 12:26:20

问题


I got following SQL Query

SELECT
    e.id,
    c.name,
    e.location,
    e.designation,
    e.time_period_from,
    e.time_period_to,
    DATEDIFF(e.time_period_to, time_period_from) AS tenure_in_days
FROM
    employment e
LEFT JOIN
    company c ON (c.id = e.company_id)
LIMIT
    0, 10

This is working perfectly, i have a scenario where time_period_to can have NULL values, in this case, i want to replace it with current date.

Here is what i tried.

SELECT
    e.id,
    c.name,
    e.location,
    e.designation,
    e.time_period_from,
    e.time_period_to,
    DATEDIFF(IF(ISNULL(e.time_period_to), NOW(), e.time_period_from)) AS tenure_in_days
FROM
    employment e
LEFT JOIN
    company c ON (c.id = e.company_id)
LIMIT
    0, 10

This gives me the following error

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'DATEDIFF'

Where am i going wrong?


回答1:


Use COALESCE instead:

SELECT
    e.id,
    c.name,
    e.location,
    e.designation,
    e.time_period_from,
    e.time_period_to,
    DATEDIFF(COALESCE(e.time_period_to, NOW()), e.time_period_from) AS tenure_in_days
FROM employment e
LEFT JOIN company c ON (c.id = e.company_id)
LIMIT 0, 10

I guess you wanted DATEDIFF(e.time_period_to, e.time_period_from).

Using LIMIT without explicit ORDER BY may return result dependent on execution plan.




回答2:


You have your parentheses in the wrong place. Instead of specifying e.time_period_from as the second argument to DATEDIFF, you have it as the third argument to IF. It should be:

DATEDIFF(IF(ISNULL(e.time_period_to), NOW(), e.time_period_to), e.time_period_from) AS tenure_in_days

You can also use IFNULL (which is a simpler version of COALESCE, and the name is more mnemonic):

DATEDIFF(IFNULL(e.time_period_to, NOW()), e.time_period_from) AS tenure_in_days


来源:https://stackoverflow.com/questions/34525443/datediff-replace-null-with-now

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!