2016-12-09 1 views
-5

etwas falsch mit meiner SQLOracle SQL über table.substr

Umgebung: Orakel 12C

--table.title verfügbar ist, und SQL unten arbeitet

select substr(title,0,length(title)-8) from table 

--Aber Diese SQL funktionierte nicht, wie man es repariert?

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

--output

"Tisch" "SUBSTR". Ungültige Kennung

thx.

+1

Sie wenden Ihre Tabellenreferenz auf die Funktion substr an, sodass Oracle denkt, dass Sie versuchen, auf eine Spalte in dieser Tabelle zu verweisen. Wie Jarlh gezeigt hat, müssen Sie stattdessen die Tabellenreferenz zu deren Spalte (n) hinzufügen. Warum übergeben Sie auch 0 als ersten Parameter von substr? Wenn Sie nur die letzten 8 Zeichen der Spalte haben wollen, würde 'substr (table.title, -8)' statt – Boneist

Antwort

1

Passen Sie Ihre Syntax:

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

table.title ist ein Argument für die LENGTH() Funktion. Muss auch Argument SUBSTR() sein.

+0

Sie können die sql verbessern, indem Sie die spezielle oracle-Syntax für den linken Join mit Pluszeichen "+" verwenden. Also, 'SELECT tableA.something FROM tableA WHERE tabelle.name (+) = substr (table.title, LENGTH (table.title) -8)'. Beide Methoden sind gültig, aber meiner Meinung nach ist es klarer und einfacher ... vielleicht ist nur eine Gewohnheit von mir. :) – OscarAkaElvis

+1

@OscarAkaElvis, bleibe ich bei der ANSI-SQL-Version der Syntax (vor allem, weil es tragbar ist und von jedem verstanden.) – jarlh

+0

Schön, ist nur ein Vorschlag ... nicht für Ihre Antwort ... ist mehr auf den Benutzer gefragt . Vielleicht kann es ihm helfen. – OscarAkaElvis