Teradata SUBSTRING 索引越界

Teradata SUBSTRING Index Out of Bounds

此查询有效:

SELECT
TOP 100     SUBSTRING(column_name FROM 6 FOR CHARACTER_LENGTH(column_name) - 5) AS X
FROM        db_name.table_name

但是下面的查询(添加了 WHERE 子句)不执行。

SELECT
TOP 100     SUBSTRING(column_name FROM 6 FOR CHARACTER_LENGTH(column_name) - 5) AS X
FROM        db_name.table_name
WHERE       NOT EXISTS
            (
            SELECT    1
            FROM      db_name2.lookup_name H
            WHERE     H.SRC_NUM1 = X 
                      AND H.SRC_TYPE = 11
            )

上面的查询抛出

SELECT Failed. 2663: SUBSTR: string subscript out of bounds in table_name.column_name

然而,下面这个有效(原始SELECT是嵌套的)

SELECT      *
FROM        (
            SELECT
            TOP 100   SUBSTRING(column_name FROM 6 FOR CHARACTER_LENGTH(column_name) - 5) AS X
            FROM      db_name.table_name
            ) A
WHERE       NOT EXISTS
            (
            SELECT    1
            FROM      db_name2.lookup_name H
            WHERE     H.SRC_NUM1 = X 
                      AND H.SRC_TYPE = 11
            )

为什么会这样?我正在使用 SQL 助手来执行查询,但我怀疑它是否相关。

尝试修改(可能是column_name的长度小于6时出错):

SELECT
TOP 100    CASE WHEN CHARACTER_LENGTH(column_name)>5 
            THEN SUBSTRING(column_name FROM 6 FOR CHARACTER_LENGTH(column_name) - 5)  
             ELSE  NULL END AS X
FROM        db_name.table_name