Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中获取以月为单位的时差_Sql_Snowflake Cloud Data Platform - Fatal编程技术网

如何在SQL中获取以月为单位的时差

如何在SQL中获取以月为单位的时差,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,以下是我当前数据集的格式: USER START_DATE END_DATE NB_MONTHS -------------------------------------------- 111 2020-01-01 2021-02-01 13 222 2020-05-17 2020-09-28 16 333 2020-02-01 2020-03-01 0 我的每个用户当前都有一个开始日期和一个结束日期,用于他们已完成的操作。

以下是我当前数据集的格式:

USER    START_DATE    END_DATE    NB_MONTHS
--------------------------------------------
111     2020-01-01    2021-02-01  13
222     2020-05-17    2020-09-28  16
333     2020-02-01    2020-03-01  0
我的每个用户当前都有一个开始日期和一个结束日期,用于他们已完成的操作。 我希望找到他们行动的持续时间(由NB_MONTHS_标志定义)

以下是获取此NB_月标志的当前查询:

SELECT 
    USERS,
    FLOOR((END_DATE)-(START_DATE))/30.00 as NB_MONTHS
FROM 
    TABLE1;
我目前正在舍入这个标志,因为这对我的分析最有意义

以下是我遇到的问题:

我的用户333在技术上花了1个月的时间来完成操作(持续时间为2月),但目前被标记为“0个月”,因为2月有28天(这对我的查询不起作用)

有人知道我如何避免这个问题吗?

你想怎么做吗

SELECT USERS,
       DATEDIFF(MONTH, START_DATE, END_DATE) as NB_MONTHS
FROM TABLE1;

是的,它有效!但是,我有一个警告:我的一些没有结束日期(尚未完成操作)的用户的结束日期为“2999-12-31”。这是一个默认的结束日期。我想做的是,对于这些用户,使用当前的_日期,而不是“2999-12-31”。当声明应用此条件时,我应该将我的案例放在哪里?非常感谢你的帮助!您可能需要
datediff(月、开始日期、最少(结束日期、当前日期))
。但您可能有有效的未来结束日期,而不是“无限期”。在这种情况下,您需要一个
case
表达式。