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

时间:2018-02-09 11:03:33

标签: sql teradata

我试图在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。 我想排除或忽略该行,但不知道如何。那怎么办呢? 或者也许有其他解决方案? THX

2 个答案:

答案 0 :(得分:0)

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

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

:) 看起来像臭虫..

答案 1 :(得分:0)

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

void MyRectangle::paint(QPainter *painter, const QStyleOptionGraphicsItem 
*option, QWidget *widget)
{
    QRectF rec = boundingRect();

    //code to fill blured background fill
}

永远不要添加/减去INTERVAL MONTH / YEAR,总是使用ADD_MONTHS

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