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以来就包括了这,应该不会导致任何错误。