2009-09-03 4 views
15

Gibt es eine Möglichkeit, einen gemeinsamen Operator für die Verkettung in Oracle, Postgres und SQL Server.String Verkettung Operator in Oracle, Postgres und SQL Server

In Oracle verwenden wir '|', postgres verwendet '||' und SQL Server verwendet '+'.

Ich habe das Problem in Postgres gelöst, indem Sie den benutzerdefinierten Operator '+' hinzufügen, um String-Verkettung zu unterstützen.

Gibt es eine Möglichkeit, denselben Operator in Oracle hinzuzufügen, um die Verkettung von Zeichenfolgen mit dem Operator '+' zu unterstützen.

+0

Warum muss die Datenbank die gleiche Syntax haben? Wenn sie alle gleich wären, würde es nur einen geben. Anwendungssprachen haben alle unterschiedliche Syntax? –

+10

Alle C-Compiler analysieren die gleiche Syntax, warum sollten nicht SQL-Parser dasselbe tun? – ijw

+1

SQL Server und Sybase verwenden die TSQL-Sprache und Oracle verwendet die PL/SQL-Sprache. TSQL unterscheidet sich von PL/SQL. –

Antwort

8

'||' funktioniert sicherlich in Oracle, obwohl nicht offensichtlich SQL Server. (Für diejenigen, die nach uns kommen, ist hier eine rosetta für SQL: SQL Dialects Reference)

Wenn Sie SQL-Skripte sind Befestigungs, würde ich die folgende Lösung in Betracht:

VOR:

sql-shell-command < sql-file.sql 

(sQL-Datei enthält '+' Operatoren)

NACH:

ansi-sql-shell-command < sql-file.sql 


sed -e 's/||/\+/' < sql-file.sql | ms-sql-shell-command 

(sql-Datei enthält '||' Operatoren, Sie müssten Ihre Dateien konvertieren)

Die Idee ist, dass Sie mit SQL in einem Format beginnen und für den speziellen Fall einen Filter darüber ausführen wandle es in das andere Format um. Theoretisch könnten Sie alle '+' es in '||' s umwandeln, aber da ein guter Teil davon eher eine numerische Addition als eine Kettenverkettung sein kann, wird das wahrscheinlich nicht so gut funktionieren.

Die Komplexität Ihres Filters hängt davon ab, was Sie tun. Wenn Sie in Ihrem SQL-Programm beliebige Daten haben, müssen Sie es erhalten, um zu vermeiden, dass Strings ersetzt werden. Aber wenn Sie Ansichten einrichten, wird es wahrscheinlich gut gehen.

Sie könnten die gleiche Technik in Programmen verwenden, wo die SQL in Strings ist - schreiben Sie eine Funktion in das Programm, um es von einem Formular zum anderen zu machen.

+1

funktioniert nicht auf sql sever –

+0

Der Link scheint nicht zu funktionieren ... = ( –

+1

@Will, Afer meine Bearbeitung, der Link funktioniert jetzt –

20

Sie können Operatoren in Oracle nicht überladen. Die "+" - Überladung würde ohnehin nicht funktionieren, da Oracle automatische Typumwandlungen vornimmt ('1' + '1' = 2).

Der von Oracle verwendete Verkettungsoperator ist ||, der auch ANSI-kompatibel ist.

Es gibt auch die CONCAT-Funktion, die (ab Postgres 9.0 und SQL Server 2012) von allen drei RDBMS unterstützt wird, für die Sie sie benötigen.

Beachten Sie, dass die Oracle-Version von CONCAT nicht wie die anderen beiden Variablen variiert. Wenn Sie drei oder mehr Strings verketten benötigen Sie nisten müssen:

CONCAT(s1,CONCAT(s2,s3)) 
+4

MySQL unterstützt die CONCAT() -Funktion, aber PostgreSQL und SQL Server nicht. Zumindest nicht aus der Box: sie könnten als gespeicherte Prozeduren erstellt werden – APC

+1

Das Problem ist, dass mein aktuelles Projekt '+' als String-Verkettungsoperator an den meisten Stellen verwendet.Es funktioniert mit Postgres Ans SQL-Server.Wir wollen nun, dass das Projekt auch mit Oracle funktioniert Aus diesem Grund brauche ich "+", um in Oracle zu arbeiten. Wenn es nicht funktioniert, müssen wir den größten Teil unseres Codes, wo wir '+' verwenden, zu einem gemeinsamen Operator '||' ändern, wenn er an allen Stellen funktioniert . ICH Brauchen Sie eine Lösung, die in den 3 Datenbanken ohne viel Änderungen in dem vorhandenen System funktioniert –

+1

Diese Funktion ist auch in PostgreSQL 9 verfügbar: http://www.postgresql.org/docs/9.1/static/functions-string.html – FGM

25

|| der Verkettungsoperator SQL-Standards (siehe SQL 2008: 5.2). Verwenden Sie das und beschweren Sie sich, wenn es nicht in dem System funktioniert, das Sie verwenden ;-)

Im Ernst, sollten Sie andere Systeme verwenden ||, nicht +.Es ist nicht nur mehr Standard, aber es ist einfacher, versehentlich Verwirrung zu verursachen, wenn Sie + verwenden, besonders wenn irgendwelche Typen abgeleitet werden müssen und implizite Umwandlungen stattfinden.

Bedenken Sie: '5' + 2

Wenn das System Sie verwenden, dass man auf keinen Fehler werfen, und + bedeutet sowohl Plus- und Verkettung, könnte man in einigen verwirrenden Ergebnissen sein.

+3

Also, Microsoft unterstützt nicht den gleichen Standard wie alle anderen, und er sollte sich bei MS beschweren und ihnen sagen, dass sie ihre Art ändern sollen. Ja, das wird funktionieren ... ;-) – ijw

+7

@ijw, Oder einfach "upgraden" auf eine bessere Datenbank :) – Cerin

+0

Beschweren Sie hier: https://connect.microsoft.com/SQLServer/feedback/details/259291/support -iso-9075-Standard-String-Verkettung-Doppelrohr – codekaizen