Teradata TPT удаляет завершающий период или экранирующий символ для одинарных кавычек - PullRequest
0 голосов
/ 31 мая 2018

У меня есть простая команда экспорта TPT, как вы можете видеть, я пытаюсь удалить завершающий период из столбца

TRIM (трейлинг '.' Из PRTY_ID)

Так как "VARCHAR SelectStmt "начинается с одинарных кавычек. Я не могу использовать одинарные кавычки в" TRIM (трейлинг ". 'Из PRTY_ID)"

Есть ли способ избежать одиночной кавычки из оператора select или любого другогоспособ удалить завершающий период.Спасибо.

DEFINE JOB EXPORT_DELIMITED_FILE
DESCRIPTION 'Export rows from a Teradata table to a delimited file'
(
    DEFINE SCHEMA FILE_SCHEMA
    (
        COL1 VARCHAR
    );

    DEFINE OPERATOR SQL_SELECTOR
    TYPE SELECTOR
    SCHEMA FILE_SCHEMA
    ATTRIBUTES
    (
        VARCHAR PrivateLogName = 'selector_log',
        VARCHAR TdpId = 'prod',
        VARCHAR LogonMech = 'LDAP',
        VARCHAR UserName = 'user1',
        VARCHAR UserPassword = 'XXXX',
        VARCHAR SelectStmt =  '  
            select TOP 100 
                trim ( 
                    cast ( 
                            ( 
                                trim(cast(cast(TRIM(trailing '.' from EMP_ID) AS CHAR(100))) 
                            ) 
                        as  CHAR(10000)) 
                )
             from DP_TRM.V_ANSWER_FACT ; ',
        VARCHAR ReportModeOn = 'Y'
    );

    DEFINE OPERATOR FILE_WRITER
    TYPE DATACONNECTOR CONSUMER
    SCHEMA *
    ATTRIBUTES
    (
        VARCHAR PrivateLogName = 'dataconnector_log',
        VARCHAR DirectoryPath = 'T:\Manjesh\Athena\Output\V_SURVEY_ANSWER_FACT\',
        VARCHAR FileName = 'V_SURVEY_ANSWER_FACT*.csv',
        VARCHAR Format = 'Delimited',
        VARCHAR IndicatorMode = 'N', 
        VARCHAR OpenMode = 'Write',
        VARCHAR TextDelimiter = '|'
    );

    APPLY TO OPERATOR (FILE_WRITER)
    SELECT * FROM OPERATOR (SQL_SELECTOR);
);

1 Ответ

0 голосов
/ 31 мая 2018

Вы избегаете этого как одиночная кавычка в строковом литерале в SQL, удваивая его:

VARCHAR SelectStmt =  '  
    select TOP 100 
        trim ( 
            cast ( 
                    ( 
                        trim(cast(cast(TRIM(trailing ''.'' from EMP_ID) AS CHAR(100))) 
                    ) 
                as  CHAR(10000)) 
        )
     from DP_TRM.V_ANSWER_FACT ; ',

Но почему вы делаете несколько CAST to CHAR, а затем TRIM вместо прямого CASTing к VarChar?

И EMP_ID, вероятно, определен как десятичное число, и конечный период добавляется из-за формата по умолчанию Z(x)9., вы можете ЗАСТАВИТЬ его в INTEGER, тогда нет необходимости в TRIM.

...