Teradata INSTR in UNIX SHELL



INSTR 和 SUBSTRING 在 SHELL 脚本中不起作用

你好

我在 UNIX shell 脚本中使用 INSTR 和 SUBSTRING。它们在Teradata sql assistant中工作,但它们都不在UNIX SHELL脚本中工作。我将子字符串更改为 SUBSTR,它起作用了。但我仍然对 INSTR 有问题。谁能帮我。

例:

选择

当子区域像"%REGION%"然后子区域其他子区域 ||' '

||"区域"结束REGION_NAME,

SUBSTR(nodes FROM instr(nodes,'-',1,1)

+1 for instr(nodes

,'-',1,1)-1) AS node,

SgSpeed,

SgUtil,

端口计数,

演员表(周结束日期为日期) 周末日期

从RNL_VIEWS。WT_CmtsSgUtil

WHERE instr(nodes,'-')> 0

和周结束日期 = '2014-12-06'

错误:

SUBSTR(nodes FROM instr(nodes,'-',1,1)

+1 for instr(nodes,'-',1,1)-1) AS n

               $

失败 3706 语法错误:预期单词"节点"之间有内容

和"发件人"关键字。

            Statement# 1, Info =582 

总运行时间为 1 秒。

谢谢纳文

Teradata 中子字符串有两种变体:

SUBSTRING(str FROM startpos FOR length) -- Standard SQL
SUBSTR(str, startpos, length) -- Teradata SQL

SUBSTR(str FROM startpos FOR length)不存在,但 ODBC 驱动程序可能会重写 ODBC 样式的SUBSTRING(str, startpos, length)。对于其他 ODBC 函数(如 LEFT 或 MONTH),也可以执行此操作。每当您尝试使用 CLI/.NET/JDBC 提交此类查询时,它都会失败。

要禁用此重写,您需要检查 ODBC 驱动程序选项中的"禁用解析"。

关于INSTR,自TD14以来就包括了这,应该不会导致任何错误。

最新更新