ИСПОЛЬЗОВАНИЕ ЗАЯВЛЕНИЯ CAST В INSERT INTOAT SQL - PullRequest
0 голосов
/ 10 октября 2019

Ниже (1) - это запрос, который я написал, и когда я не использую CAST, я получаю ошибку (2), а когда я использую приведение его, выдает другую синтаксическую ошибку (3)

(1)

 /*DROP TABLE IF EXISTS LFB1_BACKUPTABLE
 CREATE TABLE LFB1_BACKUPTABLE AS   
(SELECT * FROM LFB1);
*/


INSERT INTO LFB1_BACKUPTABLE (
    MANDT,LIFNR,BUKRS,PERNR,ERDAT,ERNAM,SPERR,LOEVM,ZUAWA,
    AKONT,BEGRU,VZSKZ,ZWELS,XVERR,ZAHLS,ZTERM,EIKTO,ZSABE,
    KVERM,FDGRV,BUSAB,LNRZE,LNRZB,ZINDT,ZINRT,DATLZ,XDEZV,
    WEBTR,KULTG,REPRF,TOGRU,HBKID,XPORE,QSZNR,QSZDT,QSSKZ,
    BLNKZ,MINDK,ALTKN,ZGRUP,MGRUP,UZAWE,QSREC,QSBGR,QLAND,
    XEDIP,FRGRP,TOGRR,TLFXS,INTAD,XLFZB,GUZTE,GRICD,GRIDT,
    XAUSZ,CERDT,CONFS,UPDAT,UPTIM,NODEL,TLFNS,AVSND,AD_HASH,
    J_SC_SUBCONTYPE,J_SC_COMPDATE,J_SC_OFFSM,J_SC_OFFSR,
    BASIS_PNT,GMVKZK,PREPAY_RELEVANT,ASSIGN_TEST, CAST(_CELONIS_CHANGE_DATE AS DATE) AS _CELONIS_CHANGE_DATE 
)
SELECT DISTINCT * FROM LFB1
WHERE MANDT||LIFNR||BUKRS NOT IN (SELECT DISTINCT MANDT||LIFNR||BUKRS FROM 
LFB1_BACKUPTABLE);

(2) Ошибка выполнения:

[Vertica] VJDBC ОШИБКА: столбец "_CELONIS_CHANGE_DATE" имеет тип timestamptz, но выражение имеет тип varchar

(3) Ошибка выполнения:

[Vertica] VJDBC ОШИБКА: синтаксическая ошибка в или около "CAST"

1 Ответ

0 голосов
/ 10 октября 2019

Почему вы используете оператор приведения в списке столбцов таблицы вставки? Вы не можете изменить тип столбцов таблицы назначения.

Вам необходимо изменить тип значений, которые вы вставляете.

INSERT INTO LFB1_BACKUPTABLE (
        MANDT,LIFNR,BUKRS,PERNR,ERDAT,ERNAM,SPERR,LOEVM,ZUAWA,
        AKONT,BEGRU,VZSKZ,ZWELS,XVERR,ZAHLS,ZTERM,EIKTO,ZSABE,
        KVERM,FDGRV,BUSAB,LNRZE,LNRZB,ZINDT,ZINRT,DATLZ,XDEZV,
        WEBTR,KULTG,REPRF,TOGRU,HBKID,XPORE,QSZNR,QSZDT,QSSKZ,
        BLNKZ,MINDK,ALTKN,ZGRUP,MGRUP,UZAWE,QSREC,QSBGR,QLAND,
        XEDIP,FRGRP,TOGRR,TLFXS,INTAD,XLFZB,GUZTE,GRICD,GRIDT,
        XAUSZ,CERDT,CONFS,UPDAT,UPTIM,NODEL,TLFNS,AVSND,AD_HASH,
        J_SC_SUBCONTYPE,J_SC_COMPDATE,J_SC_OFFSM,J_SC_OFFSR,
        BASIS_PNT,GMVKZK,PREPAY_RELEVANT,ASSIGN_TEST, _CELONIS_CHANGE_DATE
)
SELECT DISTINCT col1, col2, col3, ..., timestamp_col::DATE FROM LFB1
WHERE MANDT||LIFNR||BUKRS NOT IN (SELECT DISTINCT MANDT||LIFNR||BUKRS FROM LFB1_BACKUPTABLE);

Ваш синтаксис для приведения к дате синтаксическиправильно, но в этом примере я использовал более общий синтаксис Vertica, который col::DATE, оба будут работать.

...