将日期函数代码转换为雪花

时间:2019-12-20 20:55:30

标签: snowflake-data-warehouse

这是sql服务器代码,我必须将此条件转换为雪花代码,我能知道如何将其转换为雪花代码吗?还需要解释。

其中CONVERT(date,CONVERT(VARCHAR(8),19000000 + datecolumn))> = cast(CONVERT(VARCHAR(25),DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())-1,0) ,120)作为日期)

和CONVERT(date,CONVERT(VARCHAR(8),19000000 + datecolumn))<= cast(CONVERT(VARCHAR(25),DATEADD(MONTH,DATEDIFF(MONTH,-1,GETDATE())-1)- 1),120)作为日期)

1 个答案:

答案 0 :(得分:0)

所以CONVERT(date, CONVERT(VARCHAR(8), 19000000+datecolumn))的左侧都相同

因此,最外层是对日期的转换,也可以通过::date进行除雪,同时,将数字转换为8字符串CONVERT(VARCHAR(8), 19000000+datecolumn),其中的格式可以视为日期,并且输入为19000000 + datecolumn,因此我想您的日期格式为YYYYMMDD,而datecolumn为{{1 }}自1900年以来。雪花中的哪一个将使用TO_DATE

的显式形式

YYMMDD

右侧的两边也都与日期进行比较,因此外面的TO_DATE( ( 19000000 + datecolumn )::text, 'YYYYMMDD')与我上面使用的:: text相同,请参见CAST

因此,最里面的部分是CAST(... as date),它是数据库时间范围内自开始时间以来的月数,以月为单位的当前日期减去1,从0开始就相加了许多个月在数据库时间范围内,因此DATEDIFF(MONTH, 0, GETDATE())是上个月的开始。因为今天是12月22日(如果我们假设今年是数据库时间0年),我们在12个月中减去1,因此将11个月加到0得到日期2019-11-01,现在0似乎是' 1900-01-01'与post一致,我猜数字值是整天(因为这似乎是Microsoft的风格),这会使DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1, 0)成为年份'1899-12-31',因此由于日期在一个月前,所以我们发现一个月的时间,而我们的起始日期是该月的月底,因此第二条语句似乎是“月末”。 ”,但是我不确定SQL Server在上个月的处理方式是2月,因此,如果结束日期被截断为2月底,或者结束日期为2月1日开始后的31天。 / p>

然后以另一种方式将该日期转换为-1,然后转换为text

再次获得date,将其截短到一个月,然后退后一步,将更加有意义。而且,如果您要截断上个月的月尾并退后一天,或者如果要31天,请将该金额前移。

因此

CURRENT_DATE()

实际上是雪花date-time help所建议的

相关问题