繁体   English   中英

Teradata 15:错误2666 einvalid日期)-如何查找损坏的值?

[英]Teradata 15: Error 2666 einvalid date) - How to find the broken value?

我试图在WHERE子句中使用以下条件:

WHERE birth_dt IS NOT NULL
AND issue_dt IS NOT NULL
AND(

    (
       age>20
       AND (birth_dt + INTERVAL '20' YEAR) > issue_dt
    )
    OR
    (
       age > 45
       AND (birth_dt + INTERVAL '45' YEAR) > issue_dt
    ))

收到以下错误:

SELECT Failed. 2666:  Invalid date supplied for cldata.birth_dt. 

如果我评论条件的第二部分( OR age > 45... etc ),则它正常工作。 所以我得出结论,在该间隔上有一行,其值为birth_dt损坏了。 我想排除或忽略该行,但不知道如何。 那么该怎么做呢? 也许还有其他解决方案? 谢谢

找到解决方案-第二个子句被这样重写:

 (
       age > 45
       AND (birth_dt + INTERVAL '44' YEAR + INTERVAL '365' DAY) > issue_dt
    )

:)好像是bug ..

当某人在2月29日出生时,加上45岁将导致无效的日期(由于Standard SQL中的愚蠢规则),例如

date '1972-02-29' + interval '45' year = '2017-02-29' = invalid date

请勿添加/减去INTERVAL MONTH / YEAR,而应始终使用ADD_MONTHS

add_months(date '1972-02-29', 45*12) = '2017-02-28' 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM