我正在尝试在vertica中执行以下查询:
select case
when to_char(to_date('02-15-2017','mm-dd-yyyy'),'mm')in(1,2,3,4,5,6,7,8,9,10) then
(select to_char(add_months(trunc(to_date('02-15-2017','mm-dd-yyyy'),'year'),-2),'mm-dd-yyyy') from dual);
else
(select to_char(add_months(trunc(to_date('02-15-2017','mm-dd-yyyy'),'year'),10),'mm-dd-yyyy') from dual)
end ett from dual;
查询在oracle中获得预期结果,但在Vertica中获取错误
:对于' IN',varchar和int类型不一致DETAIL:列: 未知和未知。
预期结果是截至2016年11月1日的财政开始日期。
答案 0 :(得分:1)
基本问题是您正在将字符串与IN()谓词中的数字进行比较。 (TO_CHAR()
带有一个数字列表)。虽然Oracle(您使用的语法建议)经常隐式转换数据类型以进行比较,但Vertica与大多数其他更符合ANSI标准的数据库一样,要严格得多。
你可以用更简洁的方式写下你的陈述:
FROM dual
子句(即使它在内部隐式添加)所以,一般来说,我会这样写:
SELECT
CASE
WHEN MONTH(DATE '2017-02-15') <= 10
THEN TO_CHAR(ADD_MONTHS(TRUNC(DATE '2017-02-05','YEAR'), -2),'mm-dd-yyyy')
ELSE TO_CHAR(ADD_MONTHS(TRUNC(DATE '2017-02-05','YEAR'), 10),'mm-dd-yyyy')
END AS ett
;