Teilen über


Aufrufe von Skalarfunktionen

Skalarfunktionen geben für jede Zeile einen Wert zurück. Die Skalarfunktion für absolute Werte verwendet beispielsweise eine numerische Spalte als Argument und gibt den absoluten Wert jedes Wertes in der Spalte zurück. Die Escapesequenz zum Aufrufen einer Skalarfunktion ist

{fn scalar-function }

wobei scalar-function eine der Funktionen ist, die in Anhang E: Skalarfunktionen aufgeführt sind. Weitere Informationen zur Escapesequenz Skalarfunktion finden Sie unter Escapesequenz Skalarfunktion in Anhang C: SQL-Grammatik.

Die folgenden SQL-Anweisungen erzeugen beispielsweise denselben Resultset von Kundennamen in Großbuchstaben. Die erste Anweisung verwendet die escape-sequence-Syntax. Die zweite Anweisung verwendet die native Syntax für Ingres für OS/2 und ist nicht interoperabel.

SELECT {fn UCASE(Name)} FROM Customers  
  
SELECT uppercase(Name) FROM Customers  

Eine Anwendung kann Aufrufe von Skalarfunktionen kombinieren, die native Syntax verwenden, und Aufrufe von Skalarfunktionen, die ODBC-Syntax verwenden. Nehmen wir zum Beispiel an, dass die Namen in der Tabelle Mitarbeiter mit einem Nachnamen, einem Komma und einem Vornamen gespeichert werden. Die folgende SQL-Anweisung erstellt einen Resultset von Nachnamen von Mitarbeitern in der Tabelle Mitarbeiter. Die Anweisung verwendet die ODBC-Skalarfunktion SUBSTRING und die SQL Server-Skalarfunktion CHARINDEX und wird nur auf SQL Server ordnungsgemäß ausgeführt.

SELECT {fn SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)} FROM Customers  

Für maximale Interoperabilität sollten Anwendungen die CONVERT-Skalarfunktion verwenden, um sicherzustellen, dass die Ausgabe einer Skalarfunktion dem erforderlichen Typ entspricht. Die CONVERT-Funktion konvertiert Daten aus einem SQL-Datentyp in den angegebenen SQL-Datentyp. Die Syntax der CONVERT-Funktion lautet wie folgt

CONVERT( value_exp , data_type)

dabei ist value_exp ein Spaltenname, das Ergebnis einer anderen skalaren Funktion oder ein Literalwert, und data_type ist ein Schlüsselwort, das dem #define Namen entspricht, der von einem SQL-Datentypbezeichner gemäß Definition in Anhang D: Datentypen verwendet wird. Die folgende SQL-Anweisung verwendet beispielsweise die CONVERT-Funktion, um sicherzustellen, dass die Ausgabe der CURDATE-Funktion ein Datum ist und nicht ein Zeitstempel oder Zeichendaten:

INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)  
   VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)  

Um zu ermitteln, welche Skalarfunktionen von einer Datenquelle unterstützt werden, ruft eine Anwendung SQLGetInfo mit den Optionen SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS und SQL_TIMEDATE_FUNCTIONS auf. Um zu ermitteln, welche Konvertierungsvorgänge von der CONVERT-Funktion unterstützt werden, ruft eine Anwendung SQLGetInfo mit allen Optionen auf, die mit SQL_CONVERT beginnen.