BTEQ中不能用length函式

miguelmin發表於2008-11-17

LENGTH()不是Teradata 的標準函式,但是Teradata SQL Assitant支援它。

今天在bteq中用此函式,報錯,搞半天,終於知道原因之所在。

[@more@]

具體操作如下:

SELECT
CASE WHEN ETL_JOB LIKE 'CHK_%'
THEN SUBSTR(TRIM(etl_job),5,LENGTH(TRIM(etl_job))-4)
ELSE ETL_JOB
END etl_job
,CAST('200811'||'01' AS DATE format 'YYYYMMDD')
,Last_JobStatus
,max(Last_Endtime)
,JobType
FROM PV_AUTO.ETL_JOB
WHERE etl_job in
(……)
group by 1,2,3,5
;

報錯資訊如下:

THEN SUBSTR(TRIM(etl_job),5,LENGTH(TRIM(etl_job))-4)
$
*** Failure 3706 Syntax error: expected something between '(' and the 'TRIM' keyword.
Statement# 1, Info =450

思維慣性,以為sql中存在不可見字元,遂重寫報錯部分,不見效。突然想起,TERADA他的標準求字串長度的函式為CHAR,CHARS,CHARACTER等,將 THEN SUBSTR(TRIM(etl_job),5,LENGTH(TRIM(etl_job))-4)改成THEN SUBSTR(TRIM(etl_job),5,CHARS(TRIM(etl_job))-4),問題解決。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16723161/viewspace-1013489/,如需轉載,請註明出處,否則將追究法律責任。

相關文章