oracle sql关于table.substr
我的sql有问题吗 环境:oracle 12C --table.title可用,下面的sql是worksoracle 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”:无效标识
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语法几年!)