Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle sql关于table.substr_Sql_Oracle_Substr - Fatal编程技术网

oracle sql关于table.substr

oracle sql关于table.substr,sql,oracle,substr,Sql,Oracle,Substr,我的sql有问题吗 环境:oracle 12C --table.title可用,下面的sql是works select substr(title,0,length(title)-8) from table --但是这个sql不起作用。如何修复它? SELECT tableA.something FROM tableA LEFT JOIN table on tableA.name = table.substr(0,LENGTH(title)-8) --输出 表“.SUBSTR”:无效标识

我的sql有问题吗

环境:oracle 12C

--table.title可用,下面的sql是works

select substr(title,0,length(title)-8)  from table
--但是这个sql不起作用。如何修复它?

SELECT tableA.something
FROM tableA 
LEFT JOIN table
on tableA.name = table.substr(0,LENGTH(title)-8) 
--输出

表“.SUBSTR”:无效标识符

thx.

将语法调整为:

SELECT tableA.something
FROM tableA 
LEFT JOIN table
on tableA.name = substr(table.title, LENGTH(table.title)-8)

table.title
LENGTH()
函数的参数。还需要是
SUBSTR()

的参数,您正在将表引用应用于SUBSTR函数,从而使Oracle认为您正在尝试引用该表中的一列。正如Jarlh所示,您需要将表引用添加到其列中。另外,为什么要将0作为substr的第一个参数传递?如果只需要列的最后8个字符,
substr(table.title,-8)
就可以了。您可以使用左连接特殊的oracle语法,使用加号“+”来改进sql。因此,
从tableA中选择tableA.something,其中tableA.name(+)=substr(table.title,LENGTH(table.title)-8)
。这两种方法都是有效的,但在我看来更清晰更简单。。。也许这只是我的一个习惯@OscarAkaElvis,我坚持使用ANSI SQL版本的语法(主要是因为它是可移植的,每个人都能理解。)很好,只是一个建议。。。不是为了你的答案。。。用户的要求更高。“也许这能帮助他。”OscarAkaElvis总的来说,ANSI连接语法是前进的方向。有些情况下,它不起作用,您必须使用旧式语法,但在其他情况下,它比旧式语法灵活得多(例如,完全外部联接)。你应该考虑切换(我说话的人拒绝切换到ANSI语法几年!)