2017-07-14 70 views
0

的这个查询的工作:Teradata的字符串索引出界

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 
      ) 

以上查询抛出

选择失败。 2663:SUBSTR:字符串标出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助手来执行查询,但我怀疑它是相关的。

+0

不能你根本'SUBSTRING(列6)'? – jarlh

+0

会尝试;但为什么第二个查询失败的原始混淆仍然为 – xenodevil

+2

错误是由FOR中的负值造成的。奇怪的数据模型,你能展示一些示例数据和预期结果吗? – dnoeth

回答

0

试图改变(也许错误时引起列名的lenght是小于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