代码之家  ›  专栏  ›  技术社区  ›  M80

teradata tpt删除单引号的尾随句点或转义字符

  •  0
  • M80  · 技术社区  · 6 年前

    我有一个简单的tpt export命令,如您所见,我正试图从列中删除后面的句点

    修剪(从prty_id开始的“.”)

    因为“varchar selectstmt”以单引号开头,所以我不能在“trim(trailing.”“from prty_id”)中使用单引号

    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 回复  |  直到 6 年前
        1
  •  0
  •   dnoeth    6 年前

    在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 ; ',
    

    但为什么要对char进行多次强制转换,然后修剪而不是直接强制转换为varchar?

    EMP_ID 可能定义为十进制,并且由于默认格式而添加了尾随句点 Z(x)9. ,可以将其强制转换为整数,则不需要修剪。