如何在雪花中使用带有 case 语句的“日期”函数

时间:2021-07-20 19:42:58

标签: snowflake-cloud-data-platform

Date Image

我将这个 case 语句附加到代码中。但它并没有像它应该的那样工作。它在(条约栏)中带来了“错误”,而不是指定的受尊重条约。我的想法是,它没有将日期识别为“日期”。谁能告诉我我做错了什么或如何将“日期”功能应用于案例陈述?谢谢!

set Reference_Org_Var = 'HII_STM';
set Load_Date_Var = current_date();
set Treaty_Var = ' ';

insert into PREMIUM_DB(Plan_Name, Member_ID, 
"3x2_Term", Member_Policy_Effective_Date,
Reference_Org, Treaty, LoadDt)

select Plan_Name, Member_ID, '3x2_Term', 
Member_Policy_Effective_Date,
FileRecdDate, $Reference_Org_Var, 
case
when Member_Policy_Effective_Date <= '2017-02-28' 
    then $Treaty_Var = '2016 Treaty'
when Member_Policy_Effective_Date between '2017-03-01' and '2018-02-28' 
    then $Treaty_Var = '2017 Treaty'
when Member_Policy_Effective_Date between '2018-03-01' and '2018-09-30' 
    then $Treaty_Var = '2018a Treaty'
when Member_Policy_Effective_Date between '2018-10-01' and '2018-10-31' 
    then $Treaty_Var = '2018b Treaty'
else $Treaty_Var = ' '
end,                                      
$Load_Date_Var

from HII_STM_PREM;

1 个答案:

答案 0 :(得分:0)

您正在将您的条约列的值设置为相等检查的结果,但您似乎实际上只想要右侧的值,您可以通过将查询更改为使用 THEN 语句来实现到 THEN '2017 Treaty' 等(而不是 THEN $Treaty_Var = '2017 Treaty'

set Treaty_Var = ' ';
WITH HII_STM_PREM as (select $1 Member_Policy_Effective_Date from VALUES ('2017-02-20'),
('2018-02-28'),
('2017-03-01'),
('2018-03-01'),
('2018-09-30'),
('2018-10-01'),
('2018-10-31'))

select
case
when Member_Policy_Effective_Date <= '2017-02-28' 
    then $Treaty_Var = '2016 Treaty'
when Member_Policy_Effective_Date between '2017-03-01' and '2018-02-28' 
    then $Treaty_Var = '2017 Treaty'
when Member_Policy_Effective_Date between '2018-03-01' and '2018-09-30' 
    then $Treaty_Var = '2018a Treaty'
when Member_Policy_Effective_Date between '2018-10-01' and '2018-10-31' 
    then $Treaty_Var = '2018b Treaty'
else $Treaty_Var = ' '
end current_val,
case
when Member_Policy_Effective_Date <= '2017-02-28' 
    then '2016 Treaty'
when Member_Policy_Effective_Date between '2017-03-01' and '2018-02-28' 
    then '2017 Treaty'
when Member_Policy_Effective_Date between '2018-03-01' and '2018-09-30' 
    then '2018a Treaty'
when Member_Policy_Effective_Date between '2018-10-01' and '2018-10-31' 
    then '2018b Treaty'
else ' '
end expected_val
from HII_STM_PREM;

CURRENT_VAL EXPECTED_VAL
FALSE   2016 Treaty
FALSE   2017 Treaty
FALSE   2017 Treaty
FALSE   2018a Treaty
FALSE   2018a Treaty
FALSE   2018b Treaty
FALSE   2018b Treaty