Teradata TPT 删除单引号的尾随句点或转义字符
Teradata TPT remove trailing period or escape character for single quote
我有简单的 TPT 导出命令,如您所见,我正在尝试从列中删除尾随句点
TRIM(PRTY_ID 的尾随 '.')
由于 "VARCHAR SelectStmt " 以单引号开头,我不能在 "TRIM(trailing '.' from 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);
);
您可以像 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 执行多次 CAST 然后 TRIM 而不是直接 CAST 到 VarChar?
而EMP_ID
可能被定义为Decimal,并且由于默认格式Z(x)9.
而添加了尾随句点,您可以将其转换为INTEGER,那么就不需要TRIM.
我有简单的 TPT 导出命令,如您所见,我正在尝试从列中删除尾随句点
TRIM(PRTY_ID 的尾随 '.')
由于 "VARCHAR SelectStmt " 以单引号开头,我不能在 "TRIM(trailing '.' from 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);
);
您可以像 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 执行多次 CAST 然后 TRIM 而不是直接 CAST 到 VarChar?
而EMP_ID
可能被定义为Decimal,并且由于默认格式Z(x)9.
而添加了尾随句点,您可以将其转换为INTEGER,那么就不需要TRIM.