Firebird Documentation IndexFirebird 2.5 SprachreferenzEingebaute Funktionen und Variablen → Skalarfunktionen
Firebird Home Firebird Home Zurück: KontextvariablenFirebird Documentation IndexNach oben: Eingebaute Funktionen und VariablenWeiter: Aggregatfunktionen

Skalarfunktionen

Inhaltsverzeichnis

Funktionen zum Arbeiten mit Kontextvariablen
Mathematische Funktionen
Functions for Working with Strings
Date and Time Functions
Funktionen zur Typumwandlung
Funktionen für Bitweise Operationen
Funktionen zum Arbeiten mit UUID
Funktionen zum Arbeiten mit Generatoren (Sequenzen)
Bedingte Funktionen

Funktionen zum Arbeiten mit Kontextvariablen

RDB$GET_CONTEXT()

Anmerkung

RDB$GET_CONTEXT und sein Gegenpart RDB$SET_CONTEXT sind vordefinierte UDFs. Sie werden hier als interne Funktionen geführt, da sie immer präsent sind—der Benutzer muss nichts tun, damit diese verfügbar sind.

Verfügbar in: DSQL, PSQL  * Als deklariertes UDF sollte es in ESQL verfügbar sein

Beschreibung: Ruft den Wert einer Kontextvariablen aus einem der Namespaces SYSTEM, USER_SESSION und USER_TRANSACTION auf.

Syntax: 

RDB$GET_CONTEXT ('<namespace>', '<varname>')

		<namespace>  ::=  SYSTEM | USER_SESSION | USER_TRANSACTION
		<varname>    ::=  Eine Zeichenfolge, bei der die Groß- und Kleinschreibung beachtet werden muss. 
                Maximal 80 Zeichen

Tabelle 8.3. RDB$GET_CONTEXT-Funktionsparameters

Parameter Beschreibung
namespace Namespace
varname Variablennamen. Groß- und Kleinschreibung Die maximale Länge beträgt 80 Zeichen


Rückgabetyp: VARCHAR(255)

Die Namespaces: Die Namespaces USER_SESSION und USER_TRANSACTION sind initial leer. Der Benutzer kann hierin Variablen erstellen und mittels RDB$SET_CONTEXT() festlegen und diese mit RDB$GET_CONTEXT() zurückgeben lassen. Der Zugriff auf den Namespace SYSTEM erfolgt nur lesend. Dieser enthält eine Menge vordefinierter Variablen, die in folgender Tabelle aufgelistet sind.

Tabelle 8.4. Kontextvariablen im SYSTEM-Namespace

DB_NAME Entweder der vollständige Pfad der Datenbank oder—falls das Verbinden mittels des Pfades deaktiviert ist—dessen Alias.
NETWORK_PROTOCOL Das Verbindungsprotokoll: 'TCPv4', 'WNET', 'XNET' oder NULL.
CLIENT_ADDRESS Für TCPv4 ist dies die IP-Adresse. Für XNET die lokale Prozess-ID. Für alle anderen Protokolle ist diese Variable NULL.
CURRENT_USER Identisch zur globalen Variable CURRENT_USER.
CURRENT_ROLE Identisch zur globalen Variable CURRENT_ROLE.
SESSION_ID Identisch zur globalen Variable CURRENT_CONNECTION
TRANSACTION_ID Identisch zur globalen Variable CURRENT_TRANSACTION
ISOLATION_LEVEL Die Isolationsstufe der aktuellen Transaktion: 'READ COMMITTED', 'SNAPSHOT' oder 'CONSISTENCY'.
ENGINE_VERSION Die (Server-) Version der Firebird-Engine. Hinzugefügt in 2.1.


Rückgabewerte und Fehlerverhalten: Wenn die abgefragte Variable im angegebenen Namespace vorhanden ist, wird ihr Wert als eine Zeichenfolge mit max. 255 Zeichen. Wenn der Namespace nicht vorhanden ist oder wenn Sie versuchen, auf eine nicht vorhandene Variable im Namespace SYSTEM zuzugreifen, wird ein Fehler ausgegeben. Wenn Sie eine nicht vorhandene Variable in einem der anderen Namespaces abfragen, wird NULL zurückgegeben. Sowohl Namespaces als auch Variablennamen müssen als single-quoted, case-sensitive, nicht NULL-Strings angegeben werden.

Beispiele: 

select rdb$get_context('SYSTEM', 'DB_NAME') from rdb$database
New.UserAddr = rdb$get_context('SYSTEM', 'CLIENT_ADDRESS');
insert into MyTable (TestField)
		values (rdb$get_context('USER_SESSION', 'MyVar'))

Siehe auch: RDB$SET_CONTEXT()

RDB$SET_CONTEXT()

Anmerkung

RDB$SET_CONTEXT und dessen Gegenpart RDB$GET_CONTEXT sind vordefinierte UDFs. Sie werden hier als interne Funktionen geführt, da sie immer präsent sind—der Benutzer muss nichts tun, damit diese verfügbar sind.

Verfügbar in: DSQL, PSQL  * Als deklariertes UDF sollte es in ESQL verfügbar sein

Beschreibung: Erstellt, setzt oder löscht eine Variable in einem der vom Benutzer beschreibbaren Namespaces USER_SESSION und USER_TRANSACTION.

Syntax: 

RDB$SET_CONTEXT ('<namespace>', '<varname>', <value> | NULL)

		<namespace>  ::=  USER_SESSION | USER_TRANSACTION
		<varname>    ::=  A case-sensitive string of max. 80 characters
		<value>      ::=  A value of any type, as long as it's castable
		              to a VARCHAR(255)

Tabelle 8.5. RDB$SET_CONTEXT-Funktionsparameter

Parameter Beschreibung
namespace Namespace
varname Variablennamen. Groß- und Kleinschreibung Die maximale Länge beträgt 80 Zeichen
value Daten eines beliebigen Typs, sofern sie in VARCHAR (255) umgewandelt werden können


Rückgabetyp: INTEGER

Die Namespaces: Die Namespaces USER_SESSION und USER_TRANSACTION sind initial leer. Der Benutzer kann hierin Variablen erstellen und mittels RDB$SET_CONTEXT() festlegen und diese mit RDB$GET_CONTEXT() zurückgeben lassen. Der Kontext USER_SESSION ist an die derzeitige Verbindung gebunden Variablen in USER_TRANSACTION existieren nur in der Transaktion, in der sie erstellt wurden. Wenn die Transaktion endet, werden der Kontext und alle hierin definierten Variablen zerstört.

Rückgabewerte und Fehlerverhalten: Die Funktion gibt 1 zurück, wenn die Variable bereits vor dem Aufruf vorhanden, und 0, falls dies nicht der Fall war. Um eine Variable aus einem Kontext zu entfernen, setzen Sie sie auf NULL. Wenn der angegebene Namespace nicht existiert, wird ein Fehler ausgelöst. Sowohl Namespaces als auch Variablennamen müssen als nicht-NULL-Zeichenketten ind einzelne Anführungszeichen eingegeben werden. Beachten Sie dabei Groß- und Kleinschreibung.

Beispiele: 

select rdb$set_context('USER_SESSION', 'MyVar', 493) from rdb$database
rdb$set_context('USER_SESSION', 'RecordsFound', RecCounter);
select rdb$set_context('USER_TRANSACTION', 'Savepoints', 'Yes')
		from rdb$database

Hinweise: 

  • Die maximale Anzahl der Variablen in einem einzelnen Kontext beträgt 1000.

  • Alle USER_TRANSACTION-Variablen überleben das ROLLBACK RETAIN (siehe ROLLBACK-Optionen) oder ROLLBACK TO SAVEPOINT unverändert, unabhängig zu welchen Zeitpunkt der Transaktion diese gesetzt wurden.

  • Aufgrund seiner UDF-ähnlichen Eigenschaft kann RDB$SET_CONTEXT —nur in PSQL— wie eine void-Funktion aufgerufen werden, ohne das Ergebnis wie im zweiten Beispiel oben zuzuweisen. Reguläre interne Funktionen erlauben diese Art der Verwendung nicht.

Siehe auch: RDB$GET_CONTEXT()

Mathematische Funktionen

ABS()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ABS (number)

Tabelle 8.6. ABS Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: Numerisch

Beschreibung: Gibt den absoluten Wert des Arguments zurck.

ACOS()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ACOS (number)
                        

Tabelle 8.7. ACOS Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs im Bereich [-1; 1]


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Arkuskosinus des Arguments zurück.

  • Das Ergebnis ist ein Winkel im Bereich [0, pi].

  • Ist das Argument außerhalb der Bereichs [-1, 1], wird NaN zurückgegeben.

ASIN()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ASIN (number)

Tabelle 8.8. ASIN Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs im Bereich [-1; 1]


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Arkussinus des Arguments zurück.

  • Das Ergebnis ist ein Winkel im Bereich [-pi/2, pi/2].

  • Liegt das Argument außerhalb des Bereichs [-1, 1], wird NaN zurückgegeben.

ATAN()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ATAN (number)

Tabelle 8.9. ATAN Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung:  Die Funktion ATAN gibt den Arcustangens des Arguments zurück. Das Ergebnis ist ein Winkel im Bereich <-pi/2, pi/2>.

ATAN2()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ATAN2 (y, x)

Tabelle 8.10. ATAN2-Funktionsparameter

Parameter Beschreibung
x Ausdruck eines numerischen Typs
y Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Winkel zurück, dessen Sinus-Kosinus-Verhältnis durch die beiden Argumente gegeben ist und dessen Sinus- und Kosinus-Zeichen den Vorzeichen der Argumente entsprechen. Dies ermöglicht Ergebnisse über den gesamten Kreis einschließlich der Winkel -pi/2 und pi/2.

  • Das Ergebnis ist ein Winkel im Bereich [-pi, pi].

  • Ist x negativ, ist das Ergebnis Pi, falls y gleich 0 ist, und -Pi falls y gleich -0 ist.

  • Wenn sowohl y als auch x 0 sind, ist das Ergebnis bedeutungslos. Beginnend mit Firebird 3 wird ein Fehler ausgelöst, wenn beide Argumente 0 sind. Bei Version 2.5.4 ist es in niedrigeren Versionen immer noch nicht behoben. Für weitere Details, besuchen Sie Tracker-Ticket CORE-3201.

Hinweise: 

  • Eine vollständig äquivalente Beschreibung dieser Funktion ist die folgende: ATAN2(y, x) ist ein Winkel zwischen der positiven X-Achse und der Linie vom Ursprung zum Punkt (x, y). Damit wird offensichtlich, dass ATAN2(0, 0) nicht definiert ist.

  • Ist x größer als 0, ist ATAN2(y, x) das gleiche wie ATAN(y/x).

  • Wenn Sinus und Kosinus des Winkels bereits bekannt sind, gibt ATAN2(sin, cos) den Winkel zurück.

CEIL(), CEILING()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details   (Betrifft nur CEILING

Syntax: 

CEIL[ING] (number)

Tabelle 8.11. CEIL[ING]-Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: BIGINT or DOUBLE PRECISION

Beschreibung: Gibt die kleinste ganze Zahl zurück, die größer oder gleich dem Argument ist.

Siehe auch: FLOOR()

COS()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

COS (angle)

Tabelle 8.12. COS Funktionsparameter

Parameter Beschreibung
angle Ein Winkel in Bogenmaß


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Kosinus eines Winkels zurück. Das Argument muss im Bogenmaß angegeben werden.

  • Jedes nicht-NULL-Ergebnis ist—offensichtlich—im Bereich [-1, 1].

COSH()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

COSH (number)

Tabelle 8.13. COSH Funktionsparameter

Parameter Beschreibung
number Eine Zahl eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Hyperbelkosinus des Arguments zurück.

  • Beliebiges non-NULL-Ergebnis liegt im Bereich [1, INF].

COT()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

COT (angle)

Tabelle 8.14. COT Funktionsparameter

Parameter Beschreibung
angle Ein Winkel in Bogenmaß


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Kotangens eines Winkels zurück. Das Argument muss im Bogenmaß angegeben werden.

EXP()

Verfügbar in: DSQL, PSQL

Syntax: 

EXP (number)

Tabelle 8.15. EXP Funktionsparameter

Parameter Beschreibung
number Eine Zahl eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt das natürliche Exponential zurück, enumber

Siehe auch: LN()

FLOOR()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

FLOOR (number)

Tabelle 8.16. FLOOR Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: BIGINT oder DOUBLE PRECISION

Beschreibung: Gibt die größte ganze Zahl zurück, die kleiner oder gleich dem Argument ist.

Siehe auch: CEIL()/ CEILING()

LN()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

LN (number)

Tabelle 8.17. LN Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Beschreibung: Gibt den natürlichen Logarithmus des Arguments zurück.

  • Ein Fehler wird ausgelöst, wenn das Argument negativ oder 0 ist.

Rückgabetyp: DOUBLE PRECISION

Siehe auch: EXP()

LOG()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

LOG (x, y)

Tabelle 8.18. LOG-Funktionsparameter

Parameter Beschreibung
x Base. Ein Ausdruck eines numerischen Typs
y Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den x-basierten Logarithmus von y zurück.

  • Wenn eines der Argumente 0 oder niedriger ist, wird ein Fehler ausgelöst. (Vor 2.5 würde dies NaN, ±INF oder 0 ergeben, abhängig von den genauen Argumentwerten)

  • Wenn beide Argumente 1 sind, wird NaN zurückgegebenreturned.

  • Wenn x = 1 und y < 1, -INF wird zurückgegeben.

  • Wenn x = 1 und y > 1, INF wird zurückgegeben.

LOG10()

Verfügbar in: DSQL, PSQL

Geändert in: 2.5

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

LOG10 (number)

Tabelle 8.19. LOG10 Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den 10-basierten Logarithmus des Arguments zurück.

  • Ein Fehler wird ausgelöst, wenn das Argument negativ oder 0 ist. (In Versionen vor 2.5 würden solche Werte zu NaN und INF resultieren.)

MOD()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

MOD (a, b)

Tabelle 8.20. MOD-Funktionsparameter

Parameter Beschreibung
a Ausdruck eines numerischen Typs
b Ausdruck eines numerischen Typs


Rückgabetyp: INTEGER oder BIGINT

Beschreibung: Gibt den Rest einer Ganzzahldivision zurück.

  • Nicht ganzzahlige Argumente werden vor der Division gerundet. Demnach ergibt „7.5 mod 2.5“ 2 (8 mod 3), nicht 0.

PI()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

PI()

Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt eine Annäherung an den Wert von Pi.

POWER()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

POWER (x, y)

Tabelle 8.21. POWER-Funktionsparameter

Parameter Beschreibung
x Ausdruck eines numerischen Typs
y Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt x hoch y zurück.

  • Ist x negativ, wird ein Fehler ausgegeben.

RAND()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

RAND()

Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt eine Zufallszahl zwischen 0 und 1 zurück.

ROUND()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ROUND (<number> [, <scale>])
                        

Tabelle 8.22. ROUND-Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs
scale Eine ganze Zahl, die die Anzahl der Dezimalstellen angibt, auf die gerundet werden soll, z.B.:
 2 zum Runden auf das nächste Vielfache von 0,01
 1 zum Runden auf das nächste Vielfache von 0,1
 0 zum Runden auf die nächste ganze Zahl
-1 zum Runden auf das nächste Vielfache von 10
-2 zum Runden auf das nächste Vielfache von 100


Rückgabetyp: INTEGER, (scaled) BIGINT or DOUBLE PRECISION

Beschreibung: Rundet eine Zahl auf die nächste ganze Zahl. Wenn der Bruchteil genau 0,5 ist, ist das Runden für positive Zahlen aufwärts und für negative Zahlen abwärts. Mit dem optionalen Argument scale kann die Zahl anstelle von ganzen Zahlen auf Zehnerpotenzen (Zehner, Hunderter, Zehntel, Hundertstel usw.) gerundet werden.

Wichtig

  • Wenn Sie das Verhalten der externen Funktion ROUND gewohnt sind, beachten Sie bitte, dass die interne Funktion immer die Hälfte von Null weg, d.h. abwärts für negative Zahlen, abrundet.

Beispiele: Ist das Argument scale vorhanden, hat das Ergebnis üblicherweise die gleiche Genauigkeit wie das erste Argument:

ROUND(123.654, 1) -- ergibt 123.700 (nicht 123.7)
ROUND(8341.7, -3) -- ergibt 8000.0 (nicht 8000)
ROUND(45.1212, 0) -- ergibt 45.0000 (nicht 45)
             

Andernfalls ist die Ergebnisgenauigkeit 0:

ROUND(45.1212) -- ergibt 45
             

SIGN()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

SIGN (number)

Tabelle 8.23. SIGN Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: SMALLINT

Beschreibung: Returns the sign of the argument: -1, 0 or 1.

SIN()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

SIN (angle)

Tabelle 8.24. SIN Funktionsparameter

Parameter Beschreibung
angle Ein Winkel im Bogenmaß


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Sinus eines Winkels zurück. Das Argument muss im Bogenmaß angegeben werden.

  • Beliebiges nicht-NULL-Ergebnis liegt—offensichtlich—im Bereich [-1, 1].

SINH()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

SINH (number)

Tabelle 8.25. SINH Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Hyperbelsinus des Arguments zurück.

SQRT()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

SQRT (number)

Tabelle 8.26. SQRT Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt die Quadratwurzel des Arguments zurück.

TAN()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

TAN (angle)

Tabelle 8.27. TAN Funktionsparameter

Parameter Beschreibung
angle Ein Winkel im Bogenmaß


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt die Tangente eines Winkels zurück. Das Argument muss im Bogenmaß angegeben werden.

TANH()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

TANH (number)

Tabelle 8.28. TANH-Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs


Rückgabetyp: DOUBLE PRECISION

Beschreibung: Gibt den Hyperbeltangens des Arguments zurück.

  • Aufgrund von Rundungen liegt ein nicht-NULL-Ergebnis im Bereich [-1, 1] (mathematisch ist es <-1, 1>).

TRUNC()

Verfügbar in: DSQL, PSQL

Syntax: 

TRUNC (<number> [, <scale>])
                       

Tabelle 8.29. TRUNC-Funktionsparameter

Parameter Beschreibung
number Ausdruck eines numerischen Typs
  Eine Ganzzahl, die die Anzahl der Dezimalstellen angibt, auf die die Abschneidung angewendet werden soll, z.
 2 zum Abschneiden auf das nächste Vielfache von 0,01
 1 zum Abschneiden auf das nächste Vielfache von 0,1
 0 zum Abschneiden auf die nächste ganze Zahl
-1 zum Abschneiden auf das nächste Vielfache von 10
-2 zum Abschneiden auf das nächste Vielfache von 100


Rückgabetyp: INTEGER, (scaled) BIGINT or DOUBLE PRECISION

Beschreibung: Gibt den ganzzahligen Teil einer Zahl zurück. Mit dem optionalen Argument scale kann die Zahl anstelle von ganzen Zahlen auf Zehnerpotenzen (Zehner, Hunderter, Zehntel, Hundertstel usw.) abgeschnitten werden.

Hinweise: 

  • IWenn das Argument scale vorhanden ist, hat das Ergebnis normalerweise die gleiche Genauigkeit wie das erste Argument, z.B.

    • TRUNC(789.2225, 2) ergibt 789.2200 (nicht 789.22)

    • TRUNC(345.4, -2) ergibt 300.0 (nicht 300)

    • TRUNC(-163.41, 0) ergibt -163.00 (nicht -163)

    Andernfalls ist die Genauigkeit 0:

    • TRUNC(-163.41) ergibt -163

Wichtig

Wenn Sie das Verhalten der externen Funktion TRUNCATE untersuchen, beachten Sie bitte, dass die interne Funktion TRUNC immer gegen Null abschneidet, d.h. aufwärts für negative Zahlen.

Functions for Working with Strings

ASCII_CHAR()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ASCII_CHAR (<code>)
                        

Tabelle 8.30. ASCII_CHAR Funktionsparameter

Parameter Beschreibung
code Eine Ganzzahl im Bereich von 0 bis 255


Rückgabetyp: [VAR]CHAR(1) CHARACTER SET NONE

Beschreibung: Gibt das ASCII-Zeichen zurück, das der im Argument übergebenen Zahl entspricht.

Wichtig

  • Wenn Sie das Verhalten der UDF ASCII_CHAR gewohnt sind, die eine leere Zeichenfolge zurückgibt, wenn das Argument 0 ist, beachten Sie bitte, dass die interne Funktion hier korrekt ein Zeichen mit dem ASCII-Code 0 zurückgibt.

ASCII_VAL()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

ASCII_VAL (ch)
                        

Tabelle 8.31. ASCII_VAL Funktionsparameter

Parameter Beschreibung
ch Eine Zeichenfolge des Datentyps [VAR]CHAR oder ein Text-BLOB mit der maximalen Größe von 32.767 Byte


Rückgabetyp: SMALLINT

Beschreibung: Gibt den ASCII-Code des übergebenen Zeichens zurück.

  • Wenn das Argument eine Zeichenfolge mit mehr als einem Zeichen ist, wird der ASCII-Code des ersten Zeichens zurückgegeben.

  • Wenn das Argument eine leere Zeichenfolge ist, wird 0 zurückgegeben.

  • Wenn das Argument NULL ist, wird NULL zurückgegeben.

  • Wenn das erste Zeichen der Argument-Zeichenfolge multi-Byte ist, wird ein Fehler ausgelöst. (Ein Fehler in Firebird 2.1—2.1.3 und 2.5 führt dazu, dass ein Fehler ausgelöst wird, wenn irgendein Zeichen in der Zeichenfolge Multibyte ist. Dies ist in den Versionen 2.1.4 und 2.5.1 behoben. )

BIT_LENGTH()

Verfügbar in: DSQL, PSQL

Syntax: 

BIT_LENGTH (string)

Tabelle 8.32. BIT_LENGTH Funktionsparameter

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps


Rückgabetyp: INTEGER

Beschreibung: Gibt die Länge in Bits der Eingabezeichenfolge an. Bei Multi-Byte-Zeichensätzen ist dies möglicherweise weniger als die Anzahl der Zeichen mal 8 mal die „formale“ Anzahl der Bytes pro Zeichen wie in RDB$CHARACTER_SETS.

Anmerkung

Bei Argumenten vom Typ CHAR berücksichtigt diese Funktion die gesamte Länge der formalen Zeichenfolge (z. B. die deklarierte Länge eines Felds oder einer Variablen). Wenn Sie die „logische“ Bitlänge erhalten möchten, ohne die nachfolgenden Leerzeichen zu zählen, schneiden sie das Argument mittels TRIM rechtsseitig ab, bevor Sie es an BIT_LENGTHübergeben.

BLOB-Unterstützung: Seit Firebird 2.1 unterstützt diese Funktion vollständig Text BLOBs beliebiger Länge und Zeichensatz.

Beispiele: 

select bit_length('Hello!') from rdb$database
		-- ergibt 48
select bit_length(_iso8859_1 'Grüß di!') from rdb$database
		-- ergibt 64: ü und ß nehmen je ein Byte in Anspruc in ISO8859_1
select bit_length
		(cast (_iso8859_1 'Grüß di!' as varchar(24) character set utf8))
		from rdb$database
		-- ergibt 80: ü und ß belegen je zwei Bytes in UTF8
select bit_length
		(cast (_iso8859_1 'Grüß di!' as char(24) character set utf8))
		from rdb$database
		-- ergibt 208: alle 24 CHAR-Positionen zählen ud zwei von ihnen haben 16 Bit.

Siehe auch: OCTET_LENGTH(), CHARACTER_LENGTH()

CHAR_LENGTH(), CHARACTER_LENGTH()

Verfügbar in: DSQL, PSQL

Syntax: 

CHAR_LENGTH (str)
		CHARACTER_LENGTH (string)

Tabelle 8.33. CHAR[ACTER]_LENGTH Funktionsparameter

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps


Rückgabetyp: INTEGER

Beschreibung: Gibt die Länge der Zeichen der Eingabezeichenfolge an.

Hinweise

  • Mit Argumenten vom Typ CHAR gibt diese Funktion die formale Stringlänge (d.h. die deklarierte Länge eines Felds oder einer Variablen) zurück. Wenn Sie die „logische“ Länge erhalten möchten, ohne die nachfolgenden Leerzeichen zu zählen, TRIM das Argument, bevor es an CHAR[ACTER]_LENGTHübergeben wird.

  • BLOB-Untersützung:   Seit Firebird 2.1 unterstützt diese Funktion Text-BLOBs beliebiger Länge und beliebiger Zeichensätze.

Beispiele: 

select char_length('Hello!') from rdb$database
		-- ergibt 6
select char_length(_iso8859_1 'Grüß di!') from rdb$database
		-- ergibt 8
select char_length
		(cast (_iso8859_1 'Grüß di!' as varchar(24) character set utf8))
		from rdb$database
		-- ergibt 8; die Tatsache, dass ü und ß jeweils zwei Bytes belegen, ist irrelevant
select char_length
		(cast (_iso8859_1 'Grüß di!' as char(24) character set utf8))
		from rdb$database
		-- ergibt 24: alle 24 CHAR-Positionen zählen

Siehe auch: BIT_LENGTH(), OCTET_LENGTH()

HASH()

Verfügbar in: DSQL, PSQL

Syntax: 

HASH (string)

Tabelle 8.34. HASH Funktionsparameter

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps


Beschreibung: Gibt einen Hash-Wert für die Eingabezeichenfolge zurück. Diese Funktion unterstützt vollständig Text-BLOBs beliebiger Länge und beliebige Zeichensätze.

Rückgabetyp: BIGINT

LEFT()

Verfügbar in: DSQL, PSQL

Syntax: 

LEFT (string, length)

Tabelle 8.35. LEFT-Funktionsparameter

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps
number Ganze Zahl. Definiert die Anzahl der zurückzugebenden Zeichen


Rückgabetyp: VARCHAR or BLOB

Beschreibung: Gibt den äußersten linken Teil der Argument-Zeichenfolge zurück. Die Anzahl der Zeichen ist im zweiten Argument angegeben.

  • Diese Funktion unterstützt vollständig TextBLOBs beliebiger Länge, einschließlich solcher mit einem Multi-Byte-Zeichensatz.

  • Falls string ein BLOB ist, ist das Ergebnis ein BLOB. Andernfalls ist das Ergebnis ein VARCHAR(n), wobei n die Länge der Eingabezeichenfolge ist.

  • Wenn das Argument length die Länge der Zeichenfolge überschreitet, wird die Eingabezeichenfolge unverändert zurückgegeben.

  • Wenn das Argument length keine Ganzzahl ist, wird kaufmännisch gerundet, z.B. wird 0.5 zu 0, 1.5 wird zu 2, 2.5 wird zu 2, 3.5 wird zu 4, etc.

Siehe auch: RIGHT()

LOWER()

Verfügbar in: DSQL, ESQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details unten

Syntax: 

LOWER (string)

Tabelle 8.36. LOWER FunktionsparameterS

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps


Rückgabetyp: (VAR)CHAR or BLOB

Beschreibung: Gibt das Kleinbuchstabenäquivalent der Eingabezeichenfolge zurück. Das genaue Ergebnis hängt vom Zeichensatz ab. Bei ASCII oder NONE zum Beispiel sind nur ASCII-Zeichen kleiner; mit OCTETS wird die gesamte Zeichenfolge unverändert zurückgegeben. Seit Firebird 2.1 unterstützt diese Funktion auch vollständig Text-BLOBs beliebiger Länge und Zeichensatzes.

Namenskonflikt

Da LOWER ein reserviertes Wort ist, hat die interne Funktion Vorrang, auch wenn die externe Funktion mit diesem Namen ebenfalls deklariert wurde. Um die (untergeordnete!) externe Funktion aufzurufen, verwenden Sie doppelte Anführungszeichen und die genaue Großschreibung, wie in "LOWER"(str).

Beispiel: 

select Sheriff from Towns
		where lower(Name) = 'cooper''s valley'

Siehe auch: UPPER

LPAD()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

LPAD(str, endlen [, padstr])

Tabelle 8.37. LPAD-Funktionsparameter

Parameter Beschreibung
str Ein Ausdruck eines Zeichenfolgetyps
endlen Länge der Ausgabezeichenfolge
padstr Das Zeichen oder die Zeichenfolge, die zum Auffüllen der Quellzeichenfolge bis zur angegebenen Länge verwendet werden soll. Standard ist Leerzeichen (' ')


Rückgabetyp: VARCHAR oder BLOB

Beschreibung: Füllt eine Zeichenfolge linksseitig mit Leerzeichen oder mit einer benutzerdefinierten Zeichenfolge, bis eine bestimmte Länge erreicht ist.

  • Diese Funktion unterstützt vollständig Text-BLOBs beliebiger Länge und Zeichensätze.

  • Wenn str ein BLOB ist, ist das Ergebnis ebenfalls ein BLOB. Andernfalls ist das Ergebnis ein VARCHAR(endlen).

  • Wenn padstr angegeben wurde und gleich '' (Leeres Zeichen) ist, findet kein Auffüllen statt.

  • Ist endlen kleiner als die aktuelle Länge der Zeichenkette, wird die Zeichenkette auf endlen Zeichen abgeschnitten, auch wenn padstr ein leeres Zeichen ist.

Anmerkung

In Firebird 2.1 2.1.3 waren alle Nicht-BLOB-Ergebnisse vom Typ VARCHAR(32765), was es ratsam machte, sie auf eine bescheidenere Größe zu übertragen. Dies ist nicht mehr der Fall.

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Es wird zwar versucht, den Speicherverbrauch zu begrenzen, dies kann jedoch die Leistung beeinträchtigen, wenn riesige BLOBs beteiligt sind.

Beispiele: 

lpad ('Hello', 12)                 -- ergibt '       Hello'
lpad ('Hello', 12, '-')            -- ergibt '-------Hello'
lpad ('Hello', 12, '')             -- ergibt 'Hello'
lpad ('Hello', 12, 'abc')          -- ergibt 'abcabcaHello'
lpad ('Hello', 12, 'abcdefghij')   -- ergibt 'abcdefgHello'
lpad ('Hello', 2)                  -- ergibt 'He'
lpad ('Hello', 2, '-')             -- ergibt 'He'
lpad ('Hello', 2, '')              -- ergibt 'He'

Siehe auch: RPAD()

OCTET_LENGTH()

Verfügbar in: DSQL, PSQL

Syntax: 

OCTET_LENGTH (string)

Tabelle 8.38. OCTET_LENGTH Funktionsparameter

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps


Rückgabetyp: INTEGER

Beschreibung: Gibt die Länge in Bytes (Oktetts) der Eingabezeichenfolge an. Bei Multi-Byte-Zeichensätzen ist dies möglicherweise weniger als die Anzahl der Zeichen mal der „formalen“Anzahl der Bytes pro Zeichen, wie in RDB$CHARACTER_SETS gefunden.

Anmerkung

Bei Argumenten vom Typ CHAR berücksichtigt diese Funktion die gesamte Länge der formalen Zeichenfolge (z. B. die deklarierte Länge eines Felds oder einer Variablen). Wenn Sie die „logische“ Byte-Länge erhalten möchten, ohne die nachfolgenden Leerzeichen zu zählen, beschneiden Sie die Zeichenfolge mittels TRIM, bevor sie diese an OCTET_LENGTH übergeben wird.

BLOB support: Diese Funktion unterstützt vollständig Text-BLOBs beliebiger Länge und Zeichensätze.

Beispiele: 

select octet_length('Hello!') from rdb$database
		-- ergibt 6
select octet_length(_iso8859_1 'Grüß di!') from rdb$database
		-- ergibt 8: ü und ß belegen ein Byte pro Zeichen in ISO8859_1
select octet_length
		(cast (_iso8859_1 'Grüß di!' as varchar(24) character set utf8))
		from rdb$database
		-- ergibt 10: ü und ß belegen zwei Bytes je Zeichen in UTF8
select octet_length
		(cast (_iso8859_1 'Grüß di!' as char(24) character set utf8))
		from rdb$database
		-- ergibt 26: alle 24 CHAR-Positionen zählen, und zwei Zeichen belegen 2 Bytes

Siehe auch: BIT_LENGTH(), CHARACTER_LENGTH()

OVERLAY()

Verfügbar in: DSQL, PSQL

Syntax: 

OVERLAY (string PLACING replacement FROM pos [FOR length])

Tabelle 8.39. OVERLAY-Funktionsparameter

Parameter Beschreibung
string Die Zeichenfolge, in die der Austausch stattfindet
replacement Ersatzzeichenfolge
pos Die Position, von der aus der Austausch stattfindet (Startposition)
length Die Anzahl der Zeichen, die überschrieben werden sollen


Rückgabetyp: VARCHAR or BLOB

Beschreibung: OVERLAY()überschreibt einen Teil einer Zeichenfolge mit einer anderen Zeichenfolge. Standardmäßig ist die Anzahl der Zeichen, die aus der Host-Zeichenfolge entfernt (überschrieben) werden, gleich der Länge der Ersatzzeichenfolge. Mit dem optionalen vierten Argument kann eine andere Anzahl von Zeichen zum Entfernen angegeben werden.

  • Diese Funktion unterstütz BLOBs beliebiger Länge.

  • Wenn string oder replacement ein BLOB ist, ist das Ergebnis ebenfalls ein BLOB. Andernfalls ist das Ergebnisd ein VARCHAR(n) wobei n die Summe der Längen von string und replacement bildet.

  • Wie üblich in SQL-String-Funktionen ist pos 1-basierend

  • Ist pos hinter dem Ende von string, wird replacement direkt hinter string platziert.

  • Ist die Anzahl der Zeichen von pos bis zum Ende von string kleiner als die Länge von replacement (oder als Argument length, falls vorhanden), wird string an Stelle pos abgeschnitten und replacement direkt dahinter platziert.

  • Der Effekt einer „FOR0“-Klausel ist, dass replacement einfach in string eingesetzt wird.

  • Ist eines der Argumente NULL ist, ist das Ergebnis ebenfalls NULL.

  • Wenn pos oder length keine Ganzzahl ist, wird kaufmännisch gerundet, d.h. 0.5 wird 0, 1.5 wird 2, 2.5 wird 2, 3.5 wird 4, etc.

Beispiele: 

overlay ('Goodbye' placing 'Hello' from 2)    -- ergibt 'GHelloe'
overlay ('Goodbye' placing 'Hello' from 5)    -- ergibt 'GoodHello'
overlay ('Goodbye' placing 'Hello' from 8)    -- ergibt 'GoodbyeHello'
overlay ('Goodbye' placing 'Hello' from 20)   -- ergibt 'GoodbyeHello'

overlay ('Goodbye' placing 'Hello' from 2 for 0)   -- ergibt 'GHellooodbye'
overlay ('Goodbye' placing 'Hello' from 2 for 3)   -- ergibt 'GHellobye'
overlay ('Goodbye' placing 'Hello' from 2 for 6)   -- ergibt 'GHello'
overlay ('Goodbye' placing 'Hello' from 2 for 9)   -- ergibt 'GHello'

overlay ('Goodbye' placing '' from 4)         -- ergibt 'Goodbye'
overlay ('Goodbye' placing '' from 4 for 3)   -- ergibt 'Gooe'
overlay ('Goodbye' placing '' from 4 for 20)  -- ergibt 'Goo'

overlay ('' placing 'Hello' from 4)           -- ergibt 'Hello'
overlay ('' placing 'Hello' from 4 for 0)     -- ergibt 'Hello'
overlay ('' placing 'Hello' from 4 for 20)    -- ergibt 'Hello'

Warnung

Wenn in einem BLOB verwendet, muss die Funktion das gesamte Objekt in den Speicher laden. Dies kann die Leistung beeinflussen, wenn große BLOBs genutzt werden.

Siehe auch: REPLACE()

POSITION()

Verfügbar in: DSQL, PSQL

Syntax: 

POSITION (substr IN string)
| POSITION (substr, string [, startpos])
                         

Tabelle 8.40. POSITION-Funktionsparameter

Parameter Beschreibung
substr Der Teilstring, dessen Position gesucht werden soll
string Die Zeichenfolge, die durchsucht werden soll
startpos Die Position in string, in der die Suche beginnen soll


Rückgabetyp: INTEGER

Beschreibung: Gibt die (1-basierte) Position des ersten Vorkommens einer Teilzeichenfolge in einer Hostzeichenfolge zurück. Mit dem optionalen dritten Argument beginnt die Suche bei einem gegebenen Offset, wobei etwaige Übereinstimmungen unberücksichtigt bleiben, die früher in der Zeichenfolge auftreten können. Wenn keine Übereinstimmung gefunden wird, ist das Ergebnis 0.

Hinweise: 

  • Das optionale Argument wird nur in der zweiten Syntax (Kommasyntax) unterstützt.

  • Die leere Zeichenfolge wird als Teilzeichenfolge jeder Zeichenfolge betrachtet. Wenn substr gleich '' (leerer String) ist und ist string ungleich NULL, ergibt dies:

    • 1 wenn startpos nicht übergeben wurde;

    • startpos wenn startpos innerhalb string liegt;

    • 0 wenn startpos hinter dem Ende von string liegt.

    Hinweis: Ein Bug in Firebird 2.1—2.1.3 und 2.5 bewirken, dass POSITIONimmer 1 zurückgibt, wenn substr ein Leerstring ist. Dies wurde in 2.1.4 und 2.5.1 gefixt.

  • Diese Funktion unterstützt Text-BLOBSs beliebiger Größe und Zeichensatzes.

Beispiele: 

position ('be' in 'To be or not to be')      -- ergibt 4
position ('be', 'To be or not to be')        -- ergibt 4
position ('be', 'To be or not to be', 4)     -- ergibt 4
position ('be', 'To be or not to be', 8)     -- ergibt 17
position ('be', 'To be or not to be', 18)    -- ergibt 0
position ('be' in 'Alas, poor Yorick!')      -- ergibt 0

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Dies kann sich auf die Leistung auswirken, wenn riesige BLOB beteiligt sind.

Siehe auch:  SUBSTRING

REPLACE()

Verfügbar in: DSQL, PSQL

Syntax: 

REPLACE (str, find, repl)

Tabelle 8.41. REPLACE-Funktionsparameter

Parameter Beschreibung
str Die Zeichenfolge, in der der Austausch stattfinden soll
find Die Zeichenfolge, nach der gesucht werden soll
repl Die Ersatzzeichenfolge


Rückgabetyp: VARCHAR or BLOB

Beschreibung: Ersetzt alle Vorkommen einer Teilzeichenfolge in einer Zeichenfolge.

  • Diese Funktion unterstützt Text-BLOBSs beliebiger Größe und Zeichensatzes.

  • Wenn eines der Argumente ein BLOB ist, ist das Ergebnis ebenfalls ein BLOB. Andernfalls ist das Ergebnis ein VARCHAR(n) mit n berechnet aus den Längen von str, find und repl in der Form, dass sogar die größtmögliche Anzahl an Ersetzungen das Feld nicht überschreiten würde.

  • Wenn find ein leerer String ist, bleibt str unverändert.

  • Wenn repl ein Leerstring ist, werden alle Vorkommen von find in str entfernt.

  • Ist ein Argument NULL, wird das Ergebnis immer NULL sein, auch wenn nichts ersetzt würde.

Beispiele: 

replace ('Billy Wilder',  'il', 'oog')     -- ergibt 'Boogly Woogder'
replace ('Billy Wilder',  'il',    '')     -- ergibt 'Bly Wder'
replace ('Billy Wilder',  null, 'oog')     -- ergibt NULL
replace ('Billy Wilder',  'il',  null)     -- ergibt NULL
replace ('Billy Wilder', 'xyz',  null)     -- ergibt NULL (!)
replace ('Billy Wilder', 'xyz', 'abc')     -- ergibt 'Billy Wilder'
replace ('Billy Wilder',    '', 'abc')     -- ergibt 'Billy Wilder'

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Dies kann sich auf die Leistung auswirken, wenn riesige BLOB beteiligt sind.

Siehe auch: OVERLAY(), SUBSTRING(), POSITION(), CHAR[ACTER]_LENGTH()

REVERSE()

Verfügbar in: DSQL, PSQL

Syntax: 

REVERSE (str)

Tabelle 8.42. REVERSE Funktionsparameter

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps


Rückgabetyp: VARCHAR

Beschreibung: Kehrt eine Zeichenfolge zurück.

Beispiele: 

  reverse ('spoonful')                 -- ergibt 'lufnoops'
		reverse ('Was it a cat I saw?')      -- ergibt '?was I tac a ti saW'

Tipp

Diese Funktion ist sehr nützlich, wenn Sie Stringendungen, z.B. bei Domain-Namen oder E-Mail-Adressen:

create index ix_people_email on people
  computed by (reverse(email));

select * from people
  where reverse(email) starting with reverse('.br');
                    

RIGHT()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

RIGHT (string, length)

Tabelle 8.43. RIGHT-Funktionsparameter

Parameter Beschreibung
string Ein Ausdruck eines Zeichenfolgetyps
length Ganze Zahl. Definiert die Anzahl der zurückzugebenden Zeichen


Rückgabetyp: VARCHAR or BLOB

Beschreibung: Gibt den rechten Teil der Argument-Zeichenfolge zurück. Die Anzahl der Zeichen ist im zweiten Argument angegeben.

  • Diese Funktion unterstützt Text BLOBs beliebiger Länge, aber hat einen Fehler in den Versionen 2.1 2.1.3 und 2.5, der es scheitert mit Text BLOBs größer als 1024 Bytes die einen Multi-Byte-Zeichensatz haben. Dies wurde in den Versionen 2.1.4 und 2.5.1 behoben.

  • Ist string ein BLOB, ist das Ergebnis ebenfalls ein BLOB. Andernfalls ist das Ergebnis ein VARCHAR(n), wobei n die Länge der Eingabezeichenfolge ist.

  • Wenn das Argument length die Länge der Zeichenfolge überschreitet, wird die Eingabezeichenfolge unverändert zurückgegeben.

  • Ist das Argument length keine Ganzzahl, wird kaufmännisch gerundet, d.h. 0.5 wird 0, 1.5 wird 2, 2.5 wird 2, 3.5 wird 4, etc.

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Dies kann sich auf die Leistung auswirken, wenn riesige BLOB beteiligt sind.

Siehe auch:  LEFT(), SUBSTRING()

RPAD()

Verfügbar in: DSQL, PSQL

Geändert in: 2.5 (backported to 2.1.4)

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

RPAD (str, endlen [, padstr])
                        

Tabelle 8.44. RPAD-Funktionsparameter

Parameter Beschreibung
str Ein Ausdruck eines Zeichenfolgetyps
endlen Länge der Ausgabezeichenfolge
padstr Das Zeichen oder die Zeichenfolge, die zum Auffüllen der Quellzeichenfolge bis zur angegebenen Länge verwendet werden soll. Standard ist Leerzeichen (' ')


Rückgabetyp: VARCHAR or BLOB

Beschreibung: Füllt eine Zeichenfolge rechtsseitig mit Leerzeichen oder mit einer benutzerdefinierten Zeichenfolge, bis eine bestimmte Länge erreicht ist.

  • Diese Funktion unterstützt vollständig Text-BLOBs beliebiger Länge und Zeichensätze.

  • Wenn str ein BLOB ist, ist das Ergebnis ebenfalls ein BLOB. Andernfalls ist das Ergebnis ein VARCHAR(endlen).

  • Wenn padstr angegeben wurde und gleich '' (Leeres Zeichen) ist, findet kein Auffüllen statt.

  • Ist endlen kleiner als die aktuelle Länge der Zeichenkette, wird die Zeichenkette auf endlen Zeichen abgeschnitten, auch wenn padstr ein leeres Zeichen ist.

Anmerkung

In Firebird 2.1 2.1.3 waren alle Nicht-BLOB-Ergebnisse vom Typ VARCHAR(32765), was es ratsam machte, sie auf eine bescheidenere Größe zu übertragen. Dies ist nicht mehr der Fall.

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Es wird zwar versucht, den Speicherverbrauch zu begrenzen, dies kann jedoch die Leistung beeinträchtigen, wenn riesige BLOBs beteiligt sind.

Beispiele: 

  rpad ('Hello', 12)                 -- ergibt 'Hello       '
		rpad ('Hello', 12, '-')            -- ergibt 'Hello-------'
		rpad ('Hello', 12, '')             -- ergibt 'Hello'
		rpad ('Hello', 12, 'abc')          -- ergibt 'Helloabcabca'
		rpad ('Hello', 12, 'abcdefghij')   -- ergibt 'Helloabcdefg'
		rpad ('Hello', 2)                  -- ergibt 'He'
		rpad ('Hello', 2, '-')             -- ergibt 'He'
		rpad ('Hello', 2, '')              -- ergibt 'He'

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Dies kann sich auf die Leistung auswirken, wenn riesige BLOB beteiligt sind.

Siehe auch: LPAD()

SUBSTRING()

Verfügbar in: DSQL, PSQL

Geändert in: 2.5.1

Syntax: 

SUBSTRING (str FROM startpos [FOR length])

Tabelle 8.45. SUBSTRING-Funktionsparameter

Parameter Beschreibung
str Ein Ausdruck eines Zeichenfolgetyps
startpos Integer-Ausdruck, die Position, von der aus der Teilstring abgerufen werden soll
length Die Anzahl der Zeichen, die nach <startpos> liegen


Rückgabetypen: VARCHAR(n) oder BLOB

Beschreibung: Die Anzahl der abzurufenden Zeichen nach dem Zurückgeben der Teilzeichenfolge einer Zeichenfolge beginnend an der angegebenen Position, entweder bis zum Ende der Zeichenfolge oder mit einer bestimmten Länge.

Diese Funktion gibt den Teilstring zurück, der an der Zeichenposition startpos beginnt (die erste Position ist 1). Ohne das Argument FOR werden alle verbleibenden Zeichen in der Zeichenfolge zurückgegeben. Mit FOR werden length Zeichen oder der Rest der Zeichenfolge zurückgegeben, je nachdem, welcher Wert kürzer ist.

In Firebird 1.x müssen startpos und length Integer-Literale sein. In 2.0 und höher können sie beliebige gültige Integer-Ausdrücke sein.

Ab Firebird 2.1 unterstützt diese Funktion vollständig binäre und text BLOBs beliebiger Länge und Zeichensatz. Wenn str ein BLOB ist, ist das Ergebnis auch ein BLOB. Für alle anderen Argumenttypen ist das Ergebnis eine VARCHAR(n). Zuvor war der Ergebnistyp CHAR(n), wenn das Argument eine CHAR(n) oder ein String-Literal.

Für nicht-BLOB-Agumente entspricht die Breite des Ergebnisfelds immer der Länge von str, unabhängig von startpos und length. Also, substring ('pinhead' von 4 für 2) gibt eine VARCHAR (7) zurück, die die Zeichenkette 'he' enthält.

Ist ein Argument NULL, ist das Ergebnis NULL.

Bugs

  • Wenn str ein BLOB ist und das length Argument nicht vorhanden ist, ist die Ausgabe auf 32767 Zeichen begrenzt. Problemumgehung: Geben Sie bei langen BLOB immer char_length (str) — oder eine ausreichend hohe Ganzzahl — als drittes Argument an, es sei denn, Sie sind sicher, dass die angeforderte Teilzeichenfolge darin passt 32767 Zeichen.

    Dieser Fehler wurde in Version 2.5.1 behoben. Der Fix wurde auch nach 2.1.5 zurückportiert.

  • Ein älterer Fehler in Firebird 2.0, der dazu führte, dass die Funktion „false emptystrings“zurückgab, wenn startpos oder length NULLwar. wurde behoben.

Beispiel: 

insert into AbbrNames(AbbrName)
		select substring(LongName from 1 for 3) from LongNames

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Dies kann sich auf die Leistung auswirken, wenn riesige BLOB beteiligt sind.

Siehe auch:  POSITION, LEFT, RIGHT, CHAR[ACTER]_LENGTH

TRIM()

Verfügbar in: DSQL, PSQL

Syntax: 

TRIM ([<adjust>] str)

<adjust> ::=  {[<where>] [what]} FROM

<where> ::=  BOTH | LEADING | TRAILING
		      

Tabelle 8.46. TRIM-Funktionsparameter

Parameter Beschreibung
str Ein Ausdruck eines Zeichenfolgetyps
where Die Position, von der der Teilstring entfernt werden soll—BOTH | LEADING | TRAILING. BOTH ist der Standard
what Der Teilstring, der entfernt werden soll (mehrfach, wenn mehrere Übereinstimmungen vorkommen) vom Anfang | dem Ende | beider Seiten des Eingabestrings <str>. Standard ist das Leerzeichen (' ')


Rückgabetyp: VARCHAR(n) or BLOB

Beschreibung: Entfernt führende und / oder nachgestellte Leerzeichen (oder optional andere Zeichenfolgen) aus der Eingabezeichenfolge. Seit Firebird 2.1 unterstützt diese Funktion vollständig Text BLOBs beliebiger Länge und Zeichensatzes.

Beispiele: 

select trim ('  Waste no space   ') from rdb$database
		-- ergibt 'Waste no space'
select trim (leading from '  Waste no space   ') from rdb$database
		-- ergibt 'Waste no space   '
select trim (leading '.' from '  Waste no space   ') from rdb$database
		-- ergibt '  Waste no space   '
select trim (trailing '!' from 'Help!!!!') from rdb$database
		-- ergibt 'Help'
select trim ('la' from 'lalala I love you Ella') from rdb$database
		-- ergibt ' I love you El'
select trim ('la' from 'Lalala I love you Ella') from rdb$database
		-- ergibt 'Lalala I love you El'

Hinweise: 

  • Wenn str ein BLOB ist, ist das Ergebnis ein BLOB. Andernfalls ist das Ergebnis ein VARCHAR(n) mit der formalen Länge n des Strings str.

  • Die zu entfernende Teilzeichenfolge darf, falls angegeben, nicht größer als 32767 Byte sein. Wenn diese Teilzeichenfolge jedoch wiederholt an der Kopf- oder Endstelle von str ist, kann die Gesamtzahl der entfernten Byte viel größer sein. (Die Einschränkung der Größe des Teilstrings wird in Firebird 3 aufgehoben.)

Warnung

Wenn diese Funktion in einem BLOB verwendet wird, muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden. Dies kann sich auf die Leistung auswirken, wenn riesige BLOB beteiligt sind.

UPPER()

Verfügbar in: DSQL, ESQL, PSQL

Syntax: 

UPPER (str)

Tabelle 8.47. UPPER Funktionsparameter

Parameter Beschreibung
str Ein Ausdruck eines Zeichenfolgetyps


Rückgabetyp: (VAR)CHAR or BLOB

Beschreibung: Gibt das Großbuchstabenäquivalent der Eingabezeichenfolge zurück. Das genaue Ergebnis hängt vom Zeichensatz ab. Bei ASCII oder NONE zum Beispiel sind nur ASCII-Zeichen größer; mit OCTETS wird die gesamte Zeichenfolge unverändert zurückgegeben. Seit Firebird 2.1 unterstützt diese Funktion auch vollständig Text-BLOBs beliebiger Länge und Zeichensatzes.

Beispiele: 

select upper(_iso8859_1 'Débâcle')
		from rdb$database
		-- ergibt 'DÉBÂCLE' (before Firebird 2.0: 'DéBâCLE')
select upper(_iso8859_1 'Débâcle' collate fr_fr)
		from rdb$database
		-- ergibt 'DEBACLE', following French uppercasing rules

Siehe auch: LOWER

Date and Time Functions

Inhaltsverzeichnis

DATEADD()
DATEDIFF()
EXTRACT()

DATEADD()

Verfügbar in: DSQL, PSQL

Geändert in: 2.5

Syntax: 

DATEADD (<args>)

		<args>      ::=  <amount> <unit> TO <datetime>
		             | <unit>, <amount>, <datetime>

		<amount>    ::=  an integer expression (negative to subtract)
		<unit>      ::=  YEAR | MONTH | WEEK | DAY
		               | HOUR | MINUTE | SECOND | MILLISECOND
		<datetime>  ::=  a DATE, TIME or TIMESTAMP expression

Tabelle 8.48. DATEADD-Funktionsparameter

Parameter Beschreibung
amount Ein ganzzahliger Ausdruck vom Typ SMALLINT, INTEGER oder BIGINT. Ein negativer Wert wird subtrahiert
unit Datums-/Zeit-Einheit
datetime Ein Ausdruck der Typen DATE, TIME oder TIMESTAMP


Rückgabetyp: DATE, TIME oder TIMESTAMP

Beschreibung: Fügt einem Datum / Uhrzeit-Wert die angegebene Anzahl von Jahren, Monaten, Wochen, Tagen, Stunden, Minuten, Sekunden oder Millisekunden hinzu. (Die WEEK-Einheit ist neu in 2.5.)

  • Der Ergebnistyp wird durch das dritte Argument bestimmt.

  • Mit TIMESTAMP und DATE-Argumenten können alle Einheiten verwendet werden. (Vor Firebird 2.5 waren Einheiten kleiner als DAY nicht erlaubt für DATE s.)

  • Mit TIME-Argumenten können nur HOUR, MINUTE, SECOND und MILLISECOND genutzt werden.

Beispiele: 

  dateadd (28 day to current_date)
		dateadd (-6 hour to current_time)
		dateadd (month, 9, DateOfConception)
		dateadd (-38 week to DateOfBirth)
		dateadd (minute, 90, time 'now')
		dateadd (? year to date '11-Sep-1973')

Siehe auch:  DATEDIFF, Operationen, die Datums- und Zeitfunktionen verwenden

DATEDIFF()

Verfügbar in: DSQL, PSQL

Geändert in: 2.5

Syntax: 

DATEDIFF (<args>)

		<args>     ::=  <unit> FROM <moment1> TO <moment2>
		            | <unit>, <moment1>, <moment2>

		<unit>     ::=  YEAR | MONTH | WEEK | DAY
		              | HOUR | MINUTE | SECOND | MILLISECOND
		<momentN>  ::=  a DATE, TIME or TIMESTAMP expression
                        

Tabelle 8.49. DATEDIFF-Funktionsparameter

Parameter Beschreibung
unit Date/time unit
moment1 Ein Ausdruck eines DATE-, TIME- oder TIMESTAMP-Typs
moment2 Ein Ausdruck eines DATE-, TIME- oder TIMESTAMP-Typs


Rückgabetyp: BIGINT

Beschreibung: Gibt die Anzahl der Jahre, Monate, Wochen, Tage, Stunden, Minuten, Sekunden oder Millisekunden zurück, die zwischen zwei Datums- / Uhrzeitwerten vergangen sind. (Die WEEK-Einheit ist neu in 2.5.)

  • DATE- und TIMESTAMP-Argumente können kombiniert werden. Andere Kombinationen sind nicht erlaubt.

  • Mit TIMESTAMP und DATE-Argumenten können alle Einheiten verwendet werden. (Vor Firebird 2.5 waren Einheiten kleiner als DAY nicht erlaubt für DATE s.)

  • Mit TIME-Argumenten können nur HOUR, MINUTE, SECOND und MILLISECOND genutzt werden.

Berechnung: 

  • DATEDIFF betrachtet keine kleineren Einheiten als die, die im ersten Argument angegeben wurden. Als Ergebnis,

    • datediff (year, date '1-Jan-2009', date '31-Dec-2009')“ ergibt 0, jedoch

    • datediff (year, date '31-Dec-2009', date '1-Jan-2010')“ ergibt 1

  • Es sieht jedoch alle größeren Einheiten. Somit gilt:

    • datediff (day, date '26-Jun-1908', date '11-Sep-1973')“ ergibt 23818

  • Ein negatives Ergebnis gibt an, dass moment2 vor moment1 liegt.

Beispiele: 

  datediff (hour from current_timestamp to timestamp '12-Jun-2059 06:00')
		datediff (minute from time '0:00' to current_time)
		datediff (month, current_date, date '1-1-1900')
		datediff (day from current_date to cast(? as date))

Siehe auch:  DATEADD, Operations Using Date and Time Values

EXTRACT()

Verfügbar in: DSQL, ESQL, PSQL

Syntax: 

EXTRACT (<part> FROM <datetime>)

		<part>      ::=  YEAR | MONTH | WEEK
		               | DAY | WEEKDAY | YEARDAY
		               | HOUR | MINUTE | SECOND | MILLISECOND
		<datetime>  ::=  ein DATE-, TIME- oder TIMESTAMP-Ausdruck

Tabelle 8.50. EXTRACT-Funktionsparameter

Parameter Beschreibung
part Datums- / Zeit-Einheit
datetime Ein Ausdruck des DATE-, TIME- oder TIMESTAMP-Typs


Rückgabetyp: SMALLINT oder NUMERIC

Beschreibung: Extrahiert und gibt ein Element aus einem Ausdruck DATE, TIME oder TIMESTAMP zurück. Diese Funktion wurde bereits in InterBase 6 hinzugefügt, aber zu diesem Zeitpunkt nicht in der Sprachreferenz dokumentiert.

Zurückgegebene Datentypen und Bereiche

Die zurückgegebenen Datentypen und möglichen Bereiche sind in der folgenden Tabelle aufgeführt. Wenn Sie versuchen, einen Teil zu extrahieren, der nicht im Argument Datum / Uhrzeit enthalten ist (z. B. SECOND aus einem DATE- oder YEAR aus einem TIME-Feld), tritt ein Fehler auf.

Tabelle 8.51. Typen und Bereiche der EXTRACT-Ergebnisse

Part Type Bereich Beschreibung
YEAR SMALLINT 1—9999  
MONTH SMALLINT 1—12  
WEEK SMALLINT 1—53  
DAY SMALLINT 1—31  
WEEKDAY SMALLINT 0—6 0 = Sonntag
YEARDAY SMALLINT 0—365 0 = 1. Januar
HOUR SMALLINT 0—23  
MINUTE SMALLINT 0—59  
SECOND NUMERIC(9,4) 0.0000—59.9999 enthält Millisekunde als Bruchteil
MILLISECOND NUMERIC(9,1) 0.0—999.9 defekt in 2.1, 2.1.1


MILLISECOND

Beschreibung: Firebird 2.1 und höher unterstützen die Extraktion der Millisekunde aus TIME oder TIMESTAMP. Der zurückgegebene Datentyp ist NUMERIC(9,1).

Anmerkung

Wenn Sie Millisekunden aus CURRENT_TIME extrahieren, beachten Sie, dass diese Variable starndardmäßig auf volle Sekunden auflöst, womit das Ergebnis immer 0 ist. Nutzen Sie CURRENT_TIME(3) oder CURRENT_TIMESTAMP um Millisekundengenauigkeit zu erhalten.

WEEK

Beschreibung: Firebird 2.1 und höher unterstützen die Extraktion der ISO-8601-Wochennummer aus DATUM oder TIMESTAMP. ISO-8601 Wochen beginnen an einem Montag und haben immer die vollen sieben Tage. Woche 1 ist die erste Woche, die eine Mehrheit (mindestens 4) ihrer Tage im neuen Jahr hat. Die ersten 1—3 Tage des Jahres können zur letzten Woche (52 oder 53) des vorhergehenden Jahres gehören. Ebenso kann ein Jahr, das letzte 1—3 Tage, zur Woche 1 des folgenden Jahres gehören.

Achtung

Seien Sie vorsichtig, wenn Sie die Ergebnisse WEEK und YEAR kombinieren. Zum Beispiel liegt der 30. Dezember 2008 in Woche 1 von 2009, also „extract (Woche vom Datum '30 Dec 2008 ')“ gibt 1 zurück. Extrahiert jedoch YEAR gibt immer das Kalenderjahr an, welches 2008 ist. In diesem Fall stehen WEEK und YEAR im Widerspruch zueinander. Das Gleiche passiert, wenn die ersten Januartage zur letzten Woche des Vorjahres gehören.

Beachten Sie außerdem, dass WEEKDAY nicht ISO-8601-kompatibel ist: Es gibt 0 für Sonntag zurück, während ISO-8601 7 angibt.

Siehe auch:  Datentypen für Datum und Zeit

Funktionen zur Typumwandlung

Inhaltsverzeichnis

CAST()

CAST()

Verfügbar in: DSQL, ESQL, PSQL

Geändert in: 2.5

Syntax: 

CAST (expression AS <target_type>)

		<target_type>  ::=  sql_datatype
		                | [TYPE OF] domain
		                | TYPE OF COLUMN relname.colname

Tabelle 8.52. CAST-Funktionsparameter

Parameter Beschreibung
value SQL-Ausdruck
datatype SQL-Datentyp
domain  
colname Spaltenname eine Tabelle oder View
precision Genauigkeit. Von 1 bis 18
scale Skalierung (Nachkommastellen). Von 0 bis 18—muss kleiner oder gleich der Präzision sein
size Die maximale Größe einer Zeichenfolge in Zeichen
charset Zeichensatz
subtype_num BLOB subtype number
subtype_name Mnemotechnischer Name des BLOB-Untertyps
seglen Segmentgröße—diese kann nicht größer als 65.535 sein


Rückgabetyp: Benutzerdefiiert.

Beschreibung: CAST konvertiert einen Ausdruck in den gewünschten Datentyp oder die gewünschte Domain. Wenn die Konvertierung nicht möglich ist, wird ein Fehler ausgelöst.

Syntax der „Kurzschreibweise

Alternative Syntax, die nur unterstützt wird, wenn ein Zeichenfolgenliteral an DATE, TIME oder TIMESTAMP übergeben wird:

datatype 'date/timestring'

Diese Syntax war bereits in InterBase verfügbar, wurde aber nie richtig dokumentiert.

Anmerkung

Die Kurzsyntax wird sofort zur Analysezeit ausgewertet, wodurch der Wert gleich bleibt, bis die Anweisung unvorbereitet ist. Für Datetime-Literale wie '12-Oktober-2012' macht dies keinen Unterschied. Für die Pseudovariablen 'NOW', 'YESTERDAY', 'TODAY' und 'TOMORROW' mag dies nich das gewünschte Verhalten sein. Wenn Sie bei jedem Aufruf den Wert benötigen, der ausgewertet werden soll, verwenden Sie die vollständige CAST () -Syntax.

Beispiele: 

Ein Voll-Syntax-Cast:

select cast ('12' || '-June-' || '1959' as date) from rdb$database

Ein String-zu-Datum-Cast in Kurzschreibweise:

update People set AgeCat = 'Old'
		where BirthDate < date '1-Jan-1943'

Beachten Sie, dass Sie auch die Kurzschrift aus dem obigen Beispiel löschen können, da die Engine aus dem Kontext (Vergleich mit einem Feld DATE) versteht, wie die Zeichenfolge zu interpretieren ist:

update People set AgeCat = 'Old'
		where BirthDate < '1-Jan-1943'

Aber das ist nicht immer möglich. Die folgende Darstellungsart kann nicht aufgelöst werden, da die Engine sonst eine Ganzzahl findet, die von einer Zeichenfolge abgezogen wird:

select date 'today' - 7 from rdb$database

Die folgende Tabelle zeigt die möglichen Typkonvertierungen mit CAST.

Tabelle 8.53. Mögliche Typkonvertierungen mit CAST

Von Zu
Numerische Typen
Numerische Typen
[VAR]CHAR
BLOB
[VAR]CHAR
BLOB
[VAR]CHAR
BLOB
Numerische Typen
DATE
TIME
TIMESTAMP
DATE
TIME
[VAR]CHAR
BLOB
TIMESTAMP
TIMESTAMP
[VAR]CHAR
BLOB
DATE
TIME


Beachten Sie, dass Informationen unter Umständen verloren gehen, z.B. wenn Sie eine Typkonvertierung von TIMESTAMP zu DATE durchführen. Die Tatsache, dass die Typen CAST-kompatibel sind, ist keine Garantie, dass die Umwandlung erfolgreich sein wird. „CAST(123456789 as SMALLINT)“ wird in jedem Falle in einem Fehler enden, genauso wie „CAST('Judgement Day' as DATE)“.

Umwandlung von Eingabefeldern: Seit Firebird 2.0 können Sie Anweisungsparameter in einen Datentyp umwandeln:

cast (? as integer)

Dies gibt Ihnen die Kontrolle über den Typ des von der Engine eingerichteten Eingabefeldes. Bitte beachten Sie, dass Sie bei Anweisungsparametern immer einen Vollsyntax Cast — benötigen; Kurzformen werden nicht unterstützt.

Umwandlung zu einer Domain oder dessen Typ: Firebird 2.1 und später unterstützen die Umwandlung zu einer Domain oder dessen Basistypen. Bei der Umwandlung zur Domain müssen Constraints (NOT NULL und / oder CHECK), die auf dieser basieren weiterhin die Bedingungen erfüllen, da die Umwandlung sonst fehlschlägt. CHECK ist erfüllt, wenn es zu TRUE oder NULL ausgewertet wird! Folgene Statements seien gegeben:

create domain quint as int check (value >= 5000)
select cast (2000 as quint) from rdb$database     -- (1)
select cast (8000 as quint) from rdb$database     -- (2)
select cast (null as quint) from rdb$database     -- (3)

Nur die erste Umwandlung (1) schlägt fehl.

Wenn der Modifikator TYPE OF verwendet wird, wird der Ausdruck in den Basistyp der Domäne umgewandelt, wobei alle Einschränkungen ignoriert werden. Mit der wie oben definierten Domäne <typ> quint </typ> sind die folgenden beiden Umwandlungen äquivalent und beide werden erfolgreich sein:

select cast (2000 as type of quint) from rdb$database
		select cast (2000 as int) from rdb$database

Wenn TYPE OF mit einem (VAR)CHAR verwendet wird, werden der Zeichensatz und die Collation beibehalten:

create domain iso20 varchar(20) character set iso8859_1;
create domain dunl20 varchar(20) character set iso8859_1 collate du_nl;
create table zinnen (zin varchar(20));
commit;
insert into zinnen values ('Deze');
insert into zinnen values ('Die');
insert into zinnen values ('die');
insert into zinnen values ('deze');

select cast(zin as type of iso20) from zinnen order by 1;
-- ergibt Deze -> Die -> deze -> die

select cast(zin as type of dunl20) from zinnen order by 1;
-- ergibt deze -> Deze -> die -> Die

Warnung

Wird die Definition einer Domain geändert, werden existierende CASTs auf diese Domain oder dessen Typ ungültig. Treten diese CASTs in PSQL-Modulen auf, kann ihre Ungültigkeit entdeckt werden. Siehe auch Das RDB$VALID_BLR-Feld in Anhang A.

Umwandlung zu einem Spaltentyp: In Firebird 2.5 und höher ist es möglich, Ausdrücke in den Typ einer vorhandenen Tabellen- oder Ansichtsspalte umzuwandeln. Nur der Typ selbst wird verwendet; Bei String-Typen umfasst dies den Zeichensatz, nicht aber die Sortierung. Constraints und Standardwerte der Quellspalte werden nicht angewendet.

create table ttt (
s varchar(40) character set utf8 collate unicode_ci_ai
);
commit;

select cast ('Jag har många vänner' as type of column ttt.s) from rdb$database;

Warnungen

  • Bei Texttypen werden Zeichensatz und Sortierung durch den Cast beibehalten—genau wie beim Casting einer Domain. Aufgrund eines Fehlers wird die Collation jedoch nicht immer berücksichtigt, wenn Vergleiche (z. B. Gleichheitsprüfungen) durchgeführt werden. In Fällen, in denen die Sortierung von Bedeutung ist, sollten Sie Ihren Code vor der Bereitstellung gründlich testen. Dieser Fehler wurde für Firebird 3 behoben.

  • Wenn die Definition einer Spalte geändert wird, werden existierende CASTs zu diesem Spaltentyp ungültig. Treten diese CASTs PSQL-Modulen auf, können diese Ungültigkeiten erkannt werden. Siehe auch Das RDB$VALID_BLR-Feld in Anhang A.

Umwandlung von BLOB s: Erfolgreiche Umwandlungen von und zu BLOBs werden seit Firebird 2.1 unterstützt.

Funktionen für Bitweise Operationen

BIN_AND()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

BIN_AND (number, number [, number ...])

Tabelle 8.54. BIN_AND-Funktionsparameter

Parameter Beschreibung
number Beliebiger Ganzzahlwert (Literal, smallint/integer/bigint, numeric/decimal mit Skalierung von 0)


Rückgabetyp: SMALLINT, INTEGER or BIGINT

Anmerkung

Das SMALLINT-Ergebnis wird nur zurückgegeben, wenn alle Argumente explizit SMALLINTs oder NUMERIC(n, 0) mit n < = 4; ansonsten geben kleine Ganzzahlen ein INTEGER-Ergebnis zurück.

Beschreibung: Gibt das Ergebnis der bitweisen UND-Operation für das Argument (die Argumente) zurück.

Siehe auch:  BIN_OR, BIN_XOR

BIN_NOT()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  NEIN

Syntax: 

BIN_NOT (number)

Tabelle 8.55. BIN_NOT Funktionsparameter

Parameter Beschreibung
number Beliebige Ganzzahl (Literal, smallint/integer/bigint, numeric/decimal mit der Skalierung von 0)


Rückgabetyp: SMALLINT, INTEGER or BIGINT

Anmerkung

Das SMALLINT-Ergebnis wird nur zurückgegeben, wenn alle Argumente explizit SMALLINTs oder NUMERIC(n, 0) mit n < = 4; ansonsten geben kleine Ganzzahlen ein INTEGER-Ergebnis zurück.

Beschreibung: Returns the result of the bitwise NOT operation on the argument, i.e., ones complement.

Siehe auch:  BIN_OR, BIN_XOR and others in this set.

BIN_OR()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

BIN_OR (number, number [, number ...])

Tabelle 8.56. BIN_OR-Funktionsparameter

Parameter Beschreibung
number Beliebige Ganzzahl (Literal, smallint/integer/bigint, numeric/decimal mit der Skalierung von 0)


Rückgabetyp: SMALLINT, INTEGER or BIGINT

Anmerkung

Das SMALLINT-Ergebnis wird nur zurückgegeben, wenn alle Argumente explizit SMALLINTs oder NUMERIC(n, 0) mit n < = 4; ansonsten geben kleine Ganzzahlen ein INTEGER-Ergebnis zurück.

Beschreibung: Gibt das Ergebnis der bitweisen ODER-Operation für das Argument (die Argumente) zurück.

Siehe auch:  BIN_AND, BIN_XOR

BIN_SHL()

Verfügbar in: DSQL, PSQL

Syntax: 

BIN_SHL (number, shift)

Tabelle 8.57. BIN_SHL-Funktionsparameter

Parameter Beschreibung
number Die Zahl eines Integer-Typs
shift Die Anzahl der Bits, um die der Zahlenwert verschoben wird


Rückgabetyp: BIGINT

Beschreibung: Returns the first argument bitwise left-shifted by the second argument, i.e. a << b or a·2^b.

Siehe auch:  BIN_SHR

BIN_SHR()

Verfügbar in: DSQL, PSQL

Syntax: 

BIN_SHR (number, shift)

Tabelle 8.58. BIN_SHR-Funktionsparameter

Parameter Beschreibung
number Die Zahl eines Integer-Typs
shift Die Anzahl der Bits, um die der Zahlenwert verschoben wird


Beschreibung: Gibt das erste Argument bitweise nach rechts verschoben durch das zweite Argument zurück, d.h. a >> b oder a/2^b.

  • Die durchgeführte Operation ist eine arithmetische Rechtsverschiebung (SAR), was bedeutet, dass das Vorzeichen des ersten Operanden immer erhalten bleibt.

Rückgabetyp: BIGINT

Siehe auch:  BIN_SHL

BIN_XOR()

Verfügbar in: DSQL, PSQL

Möglicher Namenskonflikt:  JA—>siehe Details

Syntax: 

BIN_XOR (number, number [, number ...])

Tabelle 8.59. BIN_XOR-Funktionsparameter

Parameter Beschreibung
number Beliebige Ganzzahl (Literal, smallint/integer/bigint, numeric/decimal mit der Skalierung von 0)


Beschreibung: Gibt das Ergebnis der bitweisen XOR-Operation für das Argument (die Argumente) zurück.

Rückgabetyp: SMALLINT, INTEGER oder BIGINT

Anmerkung

Das SMALLINT-Ergebnis wird nur zurückgegeben, wenn alle Argumente explizit SMALLINTs oder NUMERIC(n, 0) mit n < = 4; ansonsten geben kleine Ganzzahlen ein INTEGER-Ergebnis zurück.

Siehe auch:  BIN_AND, BIN_OR

Funktionen zum Arbeiten mit UUID

CHAR_TO_UUID()

Verfügbar in: DSQL, PSQL

Aufgenommen in: 2.5

Syntax: 

CHAR_TO_UUID (ascii_uuid)
                        

Tabelle 8.60. CHAR_TO_UUID Funktionsparameter

Parameter Beschreibung
ascii_uuid Eine 36-stellige Darstellung der UUID. '-' (Bindestrich) in den Positionen 9, 14, 19 und 24; gültige hexadezimale Ziffern in anderen Positionen, z. "A0bF4E45-3029-2a44-D493-4998c9b439A3"


Rückgabetyp: CHAR(16) CHARACTER SET OCTETS

Beschreibung: Konvertiert eine für Menschen lesbare UUID-Zeichenfolge mit 36 Zeichen in die entsprechende 16-Byte-UUID.

Beispiele: 

select char_to_uuid('A0bF4E45-3029-2a44-D493-4998c9b439A3') from rdb$database
		-- ergibt A0BF4E4530292A44D4934998C9B439A3 (16-byte string)

		select char_to_uuid('A0bF4E45-3029-2A44-X493-4998c9b439A3') from rdb$database
		-- error: - Das für den Benutzer lesbare UUID-Argument für CHAR_TO_UUID muss eine 
                --          Hexadezimalstelle an Position 20 anstelle von "X (ASCII 88)" haben.

Siehe auch: UUID_TO_CHAR(), GEN_UUID()

GEN_UUID()

Verfügbar in: DSQL, PSQL

Syntax: 

GEN_UUID()

Rückgabetyp: CHAR(16) CHARACTER SET OCTETS

Beschreibung: Gibt eine universell eindeutige ID als 16-Byte-Zeichenfolge zurück.

Beispiel: 

select gen_uuid() from rdb$database
		-- ergibt z.B. 017347BFE212B2479C00FA4323B36320 (16-byte string)

Siehe auch: UUID_TO_CHAR(), CHAR_TO_UUID()

UUID_TO_CHAR()

Verfügbar in: DSQL, PSQL

Aufgenommen in: 2.5

Syntax: 

UUID_TO_CHAR (uuid)

		uuid  ::=  eine Zeichenfolge bestehend aus 16 Einzelbyte-Zeichen

Tabelle 8.61. UUID_TO_CHAR-Funktionsparameter

Parameter Beschreibung
uuid 16-byte UUID


Rückgabetyp: CHAR(36)

Beschreibung: Konvertiert eine 16-Byte-UUID in ihre aus 36 Zeichen bestehende, für Menschen lesbare ASCII-Darstellung.

Beispiele: 

select uuid_to_char(x'876C45F4569B320DBCB4735AC3509E5F') from rdb$database
		-- ergibt '876C45F4-569B-320D-BCB4-735AC3509E5F'

		select uuid_to_char(gen_uuid()) from rdb$database
		-- ergibt z.B. '680D946B-45FF-DB4E-B103-BB5711529B86'

		select uuid_to_char('Firebird swings!') from rdb$database
		-- ergibt '46697265-6269-7264-2073-77696E677321'

Siehe auch: CHAR_TO_UUID(), GEN_UUID()

Funktionen zum Arbeiten mit Generatoren (Sequenzen)

Inhaltsverzeichnis

GEN_ID()

GEN_ID()

Verfügbar in: DSQL, ESQL, PSQL

Beschreibung: Inkrementiert einen Generator oder eine Sequenz und gibt den neuen Wert zurück. Ab Firebird 2.0 wird die SQL-kompatible Syntax NEXT VALUE FOR bevorzugt, außer wenn ein anderes Inkrement als 1 benötigt wird.

Rückgabetyp: BIGINT

Syntax: 

GEN_ID (generator-name, <step>)
		      

Tabelle 8.62. GEN_ID-Funktionsparameter

Parameter Beschreibung
generator-name Name eines Generators (Sequenz), der existiert. Wenn es in doppelten Anführungszeichen mit einer Kennung, bei der die Groß- und Kleinschreibung beachtet wird, definiert wurde, muss es in derselben Form verwendet werden, es sei denn, der Name ist ausschließlich in Großbuchstaben angegeben.
step Ein Integer-Ausdruck


Rückgabetyp: BIGINT

Beschreibung: Inkrementiert einen Generator oder eine Sequenz und gibt den neuen Wert zurück. Wenn die Schrittweite gleich 0 ist, behält die Funktion den Wert des Generators unverändert bei und gibt den aktuellen Wert zurück.

  • Ab Firebird 2.0 wird die SQL-kompatible Syntax NEXT VALUE FOR bevorzugt, außer wenn ein anderes Inkrement als 1 benötigt wird.

Beispiel: 

new.rec_id = gen_id(gen_recnum, 1);

Warnung

Wenn der Wert des Schrittparameters kleiner als Null ist, wird der Wert des Generators verringert. Aber Achtung! Sie sollten mit solchen Manipulationen in der Datenbank äußerst vorsichtig sein, da sie die Datenintegrität beeinträchtigen könnten.

Siehe auch: NEXT VALUE FOR, CREATE SEQUENCE (GENERATOR)

Bedingte Funktionen

COALESCE()

Verfügbar in: DSQL, PSQL

Syntax: 

COALESCE (<exp1>, <exp2> [, <expN> ... ])

Tabelle 8.63. COALESCE-Funktionsparameter

Parameter Beschreibung
exp1, exp2 … expN Eine Liste von Ausdrücken aller kompatiblen Typen


Beschreibung: Die Funktion COALESCE übernimmt zwei oder mehr Argumente und gibt den ersten Wert zurück, den nicht NULL ist. Werden alle Argumente zu NULL aufgelöst, ist das Ergebnis ebenfalls NULL.

Rückgabetyp: Abhängig von der Eingabe.

Beispiel: In diesem Beispiel wird der Spitzname aus der Tabelle "Personen" ausgewählt. Wenn dieser NULL ist, geht es weiter zu FirstName. Wenn dieser auch NULL ist, wird „Mr./Mrs.“ verwendet. Schließlich fügt es den Familiennamen hinzu. Alles in allem versucht es, die verfügbaren Daten zu verwenden, um einen vollständigen Namen zu formulieren, der so informell wie möglich ist. Beachten Sie, dass dieses Schema nur funktioniert, wenn fehlende Spitznamen und Vornamen wirklich NULL sind: Wenn eine davon eine leere Zeichenfolge ist, gibt COALESCE diese an den Aufrufer zurück.

select
		coalesce (Nickname, FirstName, 'Mr./Mrs.') || ' ' || LastName
		as FullName
		from Persons

Siehe auch:  IIF, NULLIF, CASE

DECODE()

Verfügbar in: DSQL, PSQL

Syntax: 

DECODE(testexpr,
       expr1, result1
       expr2, result2 …]
       [, defaultresult])
                      

The equivalent CASE construct:

CASE testexpr
       WHEN expr1 THEN result1
       [WHEN expr2 THEN result2 …]
       [ELSE defaultresult]
END
                      

Tabelle 8.64. DECODE-Funktionsparameter

Parameter Beschreibung
testexpr Ein Ausdruck eines kompatiblen Typs, der mit den Ausdrücken expr1, expr2 ... exprN verglichen wird
expr1, expr2, … exprN Ausdrücke beliebiger kompatibler Typen, auf die der <testexpr> Ausdruck wird verglichen
result1, result2, … resultN Zurückgegebene Werte eines beliebigen Typs
defaultresult Der Ausdruck, der zurückgegeben werden soll, wenn keine der Bedingungen erfüllt ist


Rückgabetyp: Verschieden

Beschreibung: DECODE ist eine Kurzform des sogenannten einfachen CASE“-Konstruktes, in welchem ein Ausdruck mit einer Anzahl weiterer Ausdrücke verglichen wird, bis eine Übereinstimmung gefunden wird. Das Ergebnis wird durch den Wert bestimmt, der nach dem übereinstimmenden Ausdruck aufgeführt wird. Wenn keine Übereinstimmung gefunden wird, wird das Standardergebnis zurückgegeben, sofern vorhanden. Andernfalls wird NULL zurückgegeben.

Achtung

Die Prüfung auf Übereinstimmung wird mit dem Operator „=“ durchgeführt, was bedeutet, dass wenn <testexpr> NULL ist, keine der Ausdrücke (<expr>s) übereinstimmt, auch wenn diese NULL sind.

Beispiel: 

select name,
		   age,
		   decode( upper(sex),
		           'M', 'Male',
		           'F', 'Female',
		           'Unknown' ),
		   religion
		from people

Siehe auch: CASE, Simple CASE

IIF()

Verfügbar in: DSQL, PSQL

Syntax: 

IIF (<condition>, ResultT, ResultF)
                        

Tabelle 8.65. IIF-Funktionsparameter

Parameter Beschreibung
condition Ein wahr-|falsch-Ausdruck
resultT Der Wert wird zurückgegeben, wenn die Bedingung wahr ist
resultF Der Wert wird zurückgegeben, wenn die Bedingung falsch ist


Rückgabetyp: Abhängig von der Eingabe.

Beschreibung: IIF benötigt drei Argumente. Wenn der erste Wert zu true lautet, wird das zweite Argument zurückgegeben. Andernfalls wird die dritte zurückgegeben.

  • IIF könnte mit dem ternären Operator „? :“ in C-ähnlichen Sprachen verglichen werden.

Beispiel: 

select iif( sex = 'M', 'Sir', 'Madam' ) from Customers

Anmerkung

IIF(Cond, Result1, Result2) ist eine Kurzform für „CASE WHENCond THEN Result1 ELSEResult2 END“.

Siehe auch:  CASE, DECODE

MAXVALUE()

Verfügbar in: DSQL, PSQL

Syntax: 

MAXVALUE (expr1 [, ... ,exprN ])

Tabelle 8.66. MAXVALUE-Funktionsparameter

Parameter Beschreibung
expr1 … exprN Liste der Ausdrücke kompatibler Typen


Rückgabetyp: Variiert entsprechend der Eingabe—Ergebnis wird vom selben Datentyp wie der erste Ausdruck in der Liste (<Ausdruck1>) sein.

Beschreibung: Gibt den Maximalwert aus einer Liste von Zahlen-, Zeichenfolgen- oder Datums- / Uhrzeitausdrücken zurück.Diese Funktion unterstützt Text-BLOBSs beliebiger Größe und Zeichenfolge

  • Löst ein Ausdruck auf NULL aus, gibt MAXVALUE ebenfalls NULL zurück. Dieses Verhalten unterscheided sich zur Aggregatfunktion MAX.

Beispiel: 

SELECT MAXVALUE(PRICE_1, PRICE_2) AS PRICE
  FROM PRICELIST
                    

Siehe auch: MINVALUE()

MINVALUE()

Verfügbar in: DSQL, PSQL

Syntax: 

MINVALUE (expr1 [, ... , exprN ])

Tabelle 8.67. MINVALUE-Funktionsparameter

Parameter Beschreibung
expr1 … exprN Liste der Ausdrücke kompatibler Typen


Rückgabetyp: Variiert entsprechend der Eingabe—Ergebnis wird vom selben Datentyp wie der erste Ausdruck in der Liste (<Ausdruck1>) sein.

Beschreibung: Gibt den Maximalwert aus einer Liste von Zahlen-, Zeichenfolgen- oder Datums- / Uhrzeitausdrücken zurück.Diese Funktion unterstützt Text-BLOBSs beliebiger Größe und Zeichenfolge

  • Löst ein Ausdruck auf NULL aus, gibt MINVALUE ebenfalls NULL zurück. Dieses Verhalten unterscheided sich zur Aggregatfunktion MIN.

Beispiel: 

SELECT MINVALUE(PRICE_1, PRICE_2) AS PRICE
  FROM PRICELIST
                    

Siehe auch: MAXVALUE()

NULLIF()

Verfügbar in: DSQL, PSQL

Syntax: 

NULLIF (<exp1>, <exp2>)

Tabelle 8.68. NULLIF-Funktionsparameter

Parameter Beschreibung
exp1 Ein Ausdruck
exp2 Ein anderer Ausdruck eines Datentyps, der mit <exp1> kompatibel ist


Beschreibung: NULLIF gibt den Wert des ersten Argumentes zurück, es sei denn es ist identisch zum zweiten. In diesem Fall wird NULL zurückgegeben.

Rückgabetyp: Abhängig von der Eingabe.

Beispiel: 

select avg( nullif(Weight, -1) ) from FatPeople

Dies ergibt das Durchschnittsgewicht der in FatPeople aufgeführten Personen, mit Ausnahme eines Gewichts von -1, da AVG NULL-Daten überspringt. Augescheinlich bedeutet -1 soviel wie „Gewicht unbekannt“ in dieser Tabelle. Ein normales AVG(Weight) würde die Gewichte von -1 inkludieren und das Ergebnis verfälschen.

Siehe auch:  COALESCE, DECODE, IIF, CASE

Zurück: KontextvariablenFirebird Documentation IndexNach oben: Eingebaute Funktionen und VariablenWeiter: Aggregatfunktionen
Firebird Documentation IndexFirebird 2.5 SprachreferenzEingebaute Funktionen und Variablen → Skalarfunktionen