FirebirdSQL logo

Der DDL_TRIGGER-Namespace

Der Namespace DDL_TRIGGER ist nur gültig, wenn ein DDL-Trigger ausgeführt wird.Seine Verwendung ist auch in gespeicherten Prozeduren und Funktionen gültig, die von DDL-Triggern aufgerufen werden.

Der Kontext DDL_TRIGGER funktioniert wie ein Stack.Bevor ein DDL-Trigger ausgelöst wird, werden die Werte relativ zum ausgeführten Befehl auf diesen Stack gelegt.Nach Abschluss des Triggers werden die Werte ausgegeben.Wenn also im Fall von kaskadierten DDL-Anweisungen ein Benutzer-DDL-Befehl einen DDL-Trigger auslöst und dieser Trigger einen anderen DDL-Befehl mit EXECUTE STATEMENT ausführt, sind die Werte des DDL_TRIGGER-Namensraums diejenigen relativ zu dem Befehl, der den letzten ausgelöst hat DDL-Trigger in der Aufrufliste.

Kontextvariablen im DDL_TRIGGER-Namespace
EVENT_TYPE

Ereignistyp (CREATE, ALTER, DROP)

OBJECT_TYPE

Objekttyp (TABLE, VIEW, etc)

DDL_EVENT

Ereignisname (<ddl event item>), wobei <ddl_event_item> EVENT_TYPE || . ist ' ' || OBJECT_TYPE

OBJECT_NAME

Name des Metadatenobjekts

OLD_OBJECT_NAME

zum Nachverfolgen der Umbenennung einer Domain (siehe Hinweis)

NEW_OBJECT_NAME

zum Nachverfolgen der Umbenennung einer Domain (siehe Hinweis)

SQL_TEXT

SQL-Anweisungstext

Note

ALTER DOMAIN old-name TO new-name setzt OLD_OBJECT_NAME und NEW_OBJECT_NAME sowohl in den BEFORE- als auch AFTER-Triggern.Für diesen Befehl hat OBJECT_NAME den alten Objektnamen in BEFORE Triggern und den neuen Objektnamen in AFTER Triggern.

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'))

docnext count = 164

RDB$SET_CONTEXT()

Verfügbar in

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

Ergebnistyp

INTEGER

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

<namespace> ::= USER_SESSION | USER_TRANSACTION
<varname>   ::= Eine Zeichenfolge in Anführungszeichen von max. 80 Zeichen
<value>     ::= Ein Wert beliebiger Art, solange er umsetzbar ist
                zu einem VARCHAR(255)
Table 1. RDB$SET_CONTEXT-Funktionsparameter
Parameter Beschreibung

namespace

Namespace

varname

Variablenname.Groß-/Kleinschreibung beachten.Die maximale Länge beträgt 80 Zeichen

value

Daten eines beliebigen Typs, sofern sie in VARCHAR(255) umgewandelt werden können

Erstellt, setzt oder hebt eine Variable in einem der vom Benutzer beschreibbaren Namensräume USER_SESSION und USER_TRANSACTION auf.

Die Namensräume

Die Namensräume USER_SESSION und USER_TRANSACTION sind zunächst leer.Der Benutzer kann mit RDB$SET_CONTEXT() Variablen darin erstellen und setzen und mit RDB$GET_CONTEXT() abrufen.Der Kontext USER_SESSION ist an die aktuelle Verbindung gebunden.Variablen in USER_TRANSACTION existieren nur in der Transaktion, in der sie gesetzt wurden.Wenn die Transaktion endet, werden der Kontext und alle darin definierten Variablen zerstört.

Rückgabewerte und Fehlerverhalten

Die Funktion gibt 1 zurück, wenn die Variable bereits vor dem Aufruf existierte und 0 wenn 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 ausgegeben.Sowohl Namensraum- als auch Variablennamen müssen in einfachen Anführungszeichen eingegeben werden, wobei die Groß-/Kleinschreibung beachtet werden muss, nicht NULL-Zeichenfolgen.

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

  • Alle USER_TRANSACTION-Variablen überleben ein ROLLBACK RETAIN (siehe ROLLBACK-Optionen) oder ROLLBACK TO SAVEPOINT unverändert, egal zu welchem Zeitpunkt der Transaktion sie gesetzt wurden.

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

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

Spezialfunktionen für DECFLOAT

COMPARE_DECFLOAT()

Verfügbar in

DSQL, PSQL

Rückgabetyp

SMALLINT

Syntax
COMPARE_DECFLOAT (decfloat1, decfloat2)
Table 1. COMPARE_DECFLOAT-Funktionsparameter
Parameter Beschreibung

decfloatn

Wert oder Ausdruck vom Typ DECFLOAT, oder Cast-kompatibel mit DECFLOAT

COMPARE_DECFLOAT vergleicht zwei DECFLOAT-Werte als gleich, unterschiedlich oder ungeordnet.Das Ergebnis ist ein SMALLINT-Wert wie folgt:

0

Werte sind identisch

1

Erster Wert ist kleiner als der zweite Wert

2

Erster Wert ist größer als der zweite Wert

3

Die Werte sind ungeordnet, d. h. einer oder beide sind NaN/sNaN

Im Gegensatz zu den Vergleichsoperatoren (‘<’, ‘=’, ‘>’ usw.) ist der Vergleich exakt: COMPARE_DECFLOAT(2.17, 2.170) ` gibt `2 zurück, nicht 0.

NORMALIZE_DECFLOAT()

Verfügbar in

DSQL, PSQL

Rückgabetyp

DECFLOAT

Syntax
NORMALIZE_DECFLOAT (decfloat_value)
Table 1. NORMALIZE_DECFLOAT-Funktionsparameter
Parameter Beschreibung

decfloat_value

Wert oder Ausdruck vom Typ DECFLOAT, oder Cast-kompatibel mit DECFLOAT

NORMALIZE_DECFLOAT nimmt ein einzelnes DECFLOAT-Argument und gibt es in seiner einfachsten Form zurück.Das bedeutet, dass für jeden Wert ungleich Null nachfolgende Nullen mit entsprechender Exponentenkorrektur entfernt werden.

Beispiele für NORMALIZE_DECFLOAT

-- Gibt 12 zurück
select normalize_decfloat(12.00)
from rdb$database;

-- Gibt 1.2E+2 zurück
select normalize_decfloat(120)
from rdb$database;

QUANTIZE()

Verfügbar in

DSQL, PSQL

Syntax
QUANTIZE (decfloat_value, exp_value)
Table 1. QUANTIZE-Funktionsparameter
Parameter Beschreibung

decfloat_value

Wert oder Ausdruck zum Quantisieren;muss vom Typ DECFLOAT sein oder Cast-kompatibel mit DECFLOAT

exp_value

Wert oder Ausdruck, der für seinen Exponenten verwendet werden soll;muss vom Typ DECFLOAT sein oder Cast-kompatibel mit DECFLOAT

QUANTIZE gibt einen DECFLOAT-Wert zurück, der in Wert und Vorzeichen (außer Rundung) gleich decfloat_value ist und der einen Exponenten hat, der gleich dem Exponenten von exp_value ist.Der Rückgabewert ist DECFLOAT(16), wenn beide Argumente DECFLOAT(16) sind, andernfalls ist der Ergebnistyp DECFLOAT(34).

Note

Der Zielexponent ist der Exponent, der im Speicherformat Decimal64 oder Decimal128 von DECFLOAT von exp_value verwendet wird.Dies ist nicht unbedingt dasselbe wie der Exponent, der in Tools wie isql angezeigt wird.Zum Beispiel ist der Wert '1.23E+2' Koeffizient '123' und Exponent '0', während '1.2' Koeffizient '12' und Exponent '-1' ist.

Wenn der Exponent von decfloat_value größer als der von exp_value ist, wird der Koeffizient von decfloat_value mit einer Zehnerpotenz multipliziert und sein Exponent verringert, ist der Exponent kleiner, dann wird sein Koeffizient mit dem aktuellen decfloat-Rundungsmodus gerundet, und seine Exponent wird erhöht.

Wenn es nicht möglich ist, den Zielexponenten zu erreichen, weil der Koeffizient die Zielgenauigkeit (16 oder 34 Dezimalstellen) überschreiten würde, wird entweder ein Fehler “Decfloat float invalid operation” ausgegeben oder NaN zurückgegeben (je nach aktuellem) Konfiguration der decfloat Traps).

Es gibt fast keine Einschränkungen für den exp_value.In fast allen Anwendungen erzeugt NaN/sNaN/Infinity jedoch eine Ausnahme (sofern dies nicht durch die aktuelle decfloat-Traps-Konfiguration erlaubt ist), NULL lässt die Funktion NULL zurückgeben und so weiter.

Beispiele für QUANTIZE

select v, pic, quantize(v, pic) from examples;

     V    PIC QUANTIZE
====== ====== ========
  3.16  0.001    3.160
  3.16   0.01     3.16
  3.16    0.1      3.2
  3.16      1        3
  3.16   1E+1     0E+1
  -0.1      1       -0
     0   1E+5     0E+5
   316    0.1    316.0
   316      1      316
   316   1E+1   3.2E+2
   316   1E+2     3E+2

TOTALORDER()

Verfügbar in

DSQL, PSQL

Rückgabetyp

SMALLINT

Syntax
TOTALORDER (decfloat1, decfloat2)
Table 1. TOTALORDER-Funktionsparameter
Parameter Beschreibung

decfloatn

Wert oder Ausdruck vom Typ DECFLOAT, oder Cast-kompatibel mit DECFLOAT

TOTALORDER vergleicht zwei DECFLOAT-Werte einschließlich aller Sonderwerte.Der Vergleich ist genau und gibt ein SMALLINT zurück, eines der folgenden:

-1

Erster Wert is kleiner als der zweite

0

Werte sind identisch

1

Erster Wert ist größer als der zweite

Für TOTALORDER-Vergleiche werden die DECFLOAT-Werte wie folgt geordnet:

-NaN < -sNaN < -INF < -0.1 < -0.10 < -0 < 0 < 0.10 < 0.1 < INF < sNaN < NaN

Kryptografische Funktionen

DECRYPT()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY oder BLOB

Syntax
DECRYPT ( encrypted_input
  USING <algorithm> [MODE <mode>]
  KEY key
  [IV iv] [<ctr_type>] [CTR_LENGTH ctr_length]
  [COUNTER initial_counter] )

!! Vgl. auch die Syntax von <<fblangref40-scalarfuncs-encrypt-de,ENCRYPT>> für weitere Details !!
Table 1. DECRYPT-Funktionsparameter
Parameter Beschreibung

encrypted_input

Verschlüsselte Eingabe als Blob oder (binärer) String

Siehe auch [fblangref40-scalarfuncs-tbl-encrypt-de] für weitere Parameter

DECRYPT entschlüsselt Daten mit einer symmetrischen Verschlüsselung.

Note
  • Größen von Datenstrings (wie encrypted_input, key und iv) müssen die Anforderungen des ausgewählten Algorithmus und Modus erfüllen.

  • Diese Funktion gibt BLOB SUB_TYPE BINARY zurück, wenn das erste Argument ein BLOB ist, und VARBINARY für alle anderen Text- und Binärtypen.

  • Wenn es sich bei den verschlüsselten Daten um Text handelte, müssen sie explizit in einen Stringtyp mit entsprechendem Zeichensatz umgewandelt werden.

  • Die Besonderheiten der verschiedenen Algorithmen werden außerhalb des Rahmens dieser Sprachreferenz betrachtet.Wir empfehlen, im Internet nach weiteren Details zu den Algorithmen zu suchen.

DECRYPT-Beispiele

select decrypt(x'0154090759DF' using sober128 key 'AbcdAbcdAbcdAbcd' iv '01234567')
  from rdb$database;
select decrypt(secret_field using aes mode ofb key '0123456701234567' iv init_vector)
  from secure_table;

ENCRYPT()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY oder BLOB

Syntax
ENCRYPT ( input
  USING <algorithm> [MODE <mode>]
  KEY key
  [IV iv] [<ctr_type>] [CTR_LENGTH ctr_length]
  [COUNTER initial_counter] )

<algorithm> ::= <block_cipher> | <stream_cipher>

<block_cipher> ::=
    AES | ANUBIS | BLOWFISH | KHAZAD | RC5
  | RC6 | SAFER+ | TWOFISH | XTEA

<stream_cipher> ::= CHACHA20 | RC4 | SOBER128

<mode> ::= CBC | CFB | CTR | ECB | OFB

<ctr_type> ::= CTR_BIG_ENDIAN | CTR_LITTLE_ENDIAN
Table 1. ENCRYPT-Funktionsparameter
Parameter Beschreibung

input

Eingabe zum Verschlüsseln als Blob oder (binäre) Zeichenfolge

algorithm

Der für die Entschlüsselung zu verwendende Algorithmus

mode

Der Algorithmusmodus;nur für Blockchiffren

key

Der Verschlüsselungs-/Entschlüsselungsschlüssel

iv

Initialisierungsvektor oder Nonce;sollte für Blockchiffren in allen Modi außer „ECB“ und für alle Stromchiffren außer „RC4“ angegeben werden

ctr_type

Endianität des Zählers;nur für CTR-Modus.Der Standardwert ist "CTR_LITTLE_ENDIAN".

ctr_length

Zählerlänge;nur für CTR-Modus.Standard ist die Größe iv.

initial_counter

Anfangszählerwert;nur für CHACHA20.Der Standardwert ist 0.

ENCRYPT kann Daten mit einer symmetrischen Verschlüsselung verschlüsseln.

Note
  • Diese Funktion gibt BLOB SUB_TYPE BINARY zurück, wenn das erste Argument ein BLOB ist, und VARBINARY für alle anderen Text- und Binärtypen.

  • Größen von Datenstrings (wie key und iv) müssen die Anforderungen des ausgewählten Algorithmus und Modus erfüllen, siehe Tabelle [fblangref40-scalarfuncs-tbl-encrypt-req-de].

    • Im Allgemeinen muss die Größe von iv der Blockgröße des Algorithmus entsprechen

    • Für den ECB- und CBC-Modus muss input ein Vielfaches der Blockgröße sein, Sie müssen gegebenenfalls manuell mit Nullen oder Leerzeichen auffüllen.

  • Die Besonderheiten der verschiedenen Algorithmen und Modi werden außerhalb des Rahmens dieser Sprachreferenz betrachtet.Wir empfehlen, im Internet nach weiteren Details zu den Algorithmen zu suchen.

  • Obwohl in dieser Sprachreferenz als separate Optionen angegeben, sind CTR_LENGTH und COUNTER in der aktuellen Firebird 4.0-Syntax Aliase.

Table 2. Anforderungen für den Verschlüsselungsalgorithmus
Algorithm Schlüsselgröße (Bytes) Blockgröße (Bytes) Hinweise

Blockchiffren

AES

16, 24, 32

16

 

ANUBIS

16 - 40, in 4er-Schritten

16

 

BLOWFISH

8 - 56

8

 

KHAZAD

16

8

 

RC5

8 - 128

8

 

RC6

8 - 128

16

 

SAFER+

16, 24, 32

16

 

TWOFISH

16, 24, 32

16

 

XTEA

16

8

 

Stream-Chiffren

CHACHA20

16, 32

1

Die Nonce-Größe (IV) beträgt 8 oder 12 Byte.Für Nonce-Größe 8 ist initial_counter eine 64-Bit-Ganzzahl, für Größe 12 32-Bit.

RC4

5 - 256

1

 

SOBER128

4x

1

Nonce-Größe (IV) beträgt 4y Byte, die Länge ist unabhängig von der Schlüsselgröße.

ENCRYPT-Beispiele

select encrypt('897897' using sober128 key 'AbcdAbcdAbcdAbcd' iv '01234567')
  from rdb$database;

RSA_DECRYPT()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY

Syntax
RSA_DECRYPT (encrypted_input KEY private_key
  [LPARAM tag_string] [HASH <hash>] [PKCS_1_5])

<hash> ::= MD5 | SHA1 | SHA256 | SHA512
Table 1. RSA_DECRYPT-Funktionsparameter
Parameter Beschreibung

encrypted_input

Input data to decrypt

private_key

Anzuwendender privater Schlüssel, PKCS#1-Format

tag_string

Ein zusätzliches systemspezifisches Tag, um zu identifizieren, welches System die Nachricht verschlüsselt hat;Standard ist NULL.Wenn das Tag nicht mit dem übereinstimmt, was während der Verschlüsselung verwendet wurde, wird RSA_DECRYPT die Daten nicht entschlüsseln.

hash

Der für OAEP-Padding verwendete Hash;Standard ist SHA256.

RSA_DECRYPT entschlüsselt encrypted_input mit dem privaten RSA-Schlüssel und dann entpackt OAEP die resultierenden Daten.

Standardmäßig wird OAEP-Padding verwendet.Die Option „PKCS_1_5“ wechselt zum weniger sicheren PKCS 1.5-Padding.Diese Option wurde in Firebird 4.0.1 eingeführt.

Warning

Die Option PKCS_1_5 dient nur der Abwärtskompatibilität mit Systemen, die PKCS 1.5-Padding verwenden.Aus Sicherheitsgründen sollte es nicht in neuen Projekten verwendet werden.

Note
  • Diese Funktion gibt VARBINARY` zurück.

  • Wenn es sich bei den verschlüsselten Daten um Text handelte, müssen sie explizit in einen Stringtyp mit entsprechendem Zeichensatz umgewandelt werden.

RSA_DECRYPT-Beispiele

Tip

Führen Sie die Beispiele RSA_PRIVATE und RSA_PUBLIC, [fblangref40-scalarfuncs-rsaencrypt-exmpl-de]-Funktionen zuerst aus.

select cast(rsa_decrypt(rdb$get_context('USER_SESSION', 'msg')
  key rdb$get_context('USER_SESSION', 'private_key')) as varchar(128))
from rdb$database;

RSA_ENCRYPT()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY

Syntax
RSA_ENCRYPT (input KEY public_key
  [LPARAM tag_string] [HASH <hash>] [PKCS_1_5])

<hash> ::= MD5 | SHA1 | SHA256 | SHA512
Table 1. RSA_ENCRYPT-Funktionsparameter
Parameter Beschreibung

input

Eingabedaten zum Verschlüsseln

public_key

Öffentlicher Schlüssel zum Anwenden, PKCS#1-Format

tag_string

Ein zusätzliches systemspezifisches Tag, um zu identifizieren, welches System die Nachricht verschlüsselt hat;Standard ist NULL.

hash

Der für OAEP-Padding verwendete Hash;Standard ist SHA256.

RSA_ENCRYPT füllt input mit dem OAEP-Padding-Schema auf und verschlüsselt es dann mit dem angegebenen öffentlichen RSA-Schlüssel.Diese Funktion wird normalerweise verwendet, um kurze symmetrische Schlüssel zu verschlüsseln, die dann in Blockchiffren verwendet werden, um eine Nachricht zu verschlüsseln.

Standardmäßig wird OAEP-Padding verwendet.Die Option PKCS_1_5 wechselt zum weniger sicheren PKCS 1.5-Padding.Diese Option wurde in Firebird 4.0.1 eingeführt.

Warning

Die Option PKCS_1_5 dient nur der Abwärtskompatibilität mit Systemen, die PKCS 1.5-Padding verwenden.Aus Sicherheitsgründen sollte es nicht in neuen Projekten verwendet werden.

RSA_ENCRYPT-Beispiele

Tip

Führen Sie zuerst die Beispiele der Funktionen RSA_PRIVATE und RSA_PUBLIC aus.

select rdb$set_context('USER_SESSION', 'msg', rsa_encrypt('Some message'
  key rdb$get_context('USER_SESSION', 'public_key'))) from rdb$database;

RSA_PRIVATE()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY

Syntax
RSA_PRIVATE (key_length)
Table 1. RSA_PRIVATE-Funktionsparameter
Parameter Beschreibung

key_length

Schlüssellänge in Byte;mindestens 4, maximal 1024.Eine Größe von 256 Byte (2048 Bit) oder größer wird empfohlen.

RSA_PRIVATE generiert einen privaten RSA-Schlüssel der angegebenen Länge (in Bytes) im PKCS#1-Format.

Note

Je größer die angegebene Länge, desto länger dauert es, bis die Funktion einen privaten Schlüssel generiert.

RSA_PRIVATE-Beispiel

select rdb$set_context('USER_SESSION', 'private_key', rsa_private(256))
  from rdb$database;
Warning

Das Einfügen privater Schlüssel in die Kontextvariablen ist nicht sicher.SYSDBA und Benutzer mit der Rolle RDB$ADMIN oder dem Systemprivileg MONITOR_ANY_ATTACHMENT können alle Kontextvariablen aus allen Anhängen sehen.

RSA_PUBLIC()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY

Syntax
RSA_PUBLIC (private_key)
Table 1. RSA_PUBLIC-Funktionsparameter
Parameter Beschreibung

private_key

Privater RSA-Schlüssel im PKCS#1-Format

RSA_PUBLIC gibt den öffentlichen RSA-Schlüssel im PKCS#1-Format für den bereitgestellten privaten RSA-Schlüssel (auch PKCS#1-Format) zurück.

RSA_PUBLIC-Beispiele

Tip

Führen Sie zuerst das Beispiel der Funktion RSA_PRIVATE aus.

select rdb$set_context('USER_SESSION', 'public_key',
  rsa_public(rdb$get_context('USER_SESSION', 'private_key'))) from rdb$database;

RSA_SIGN_HASH()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY

Syntax
RSA_SIGN_HASH (message_digest
  KEY private_key
  [HASH <hash>] [SALT_LENGTH salt_length]
  [PKCS_1_5])

<hash> ::= MD5 | SHA1 | SHA256 | SHA512
Table 1. RSA_SIGN_HASH-Funktionsparameter
Parameter Beschreibung

message_digest

Hash der zu unterschreibenden Nachricht.Der verwendete Hash-Algorithmus sollte mit hash übereinstimmen.

private_key

Privater RSA-Schlüssel im PKCS#1-Format

hash

Hash zum Generieren von PSS-Codierung;Standard ist SHA256.Dies sollte der gleiche Hash sein, der zum Generieren von message_digest verwendet wird.

salt_length

Länge des gewünschten Salts in Bytes;Standard ist 8;mindestens 1, maximal 32.Der empfohlene Wert liegt zwischen 8 und 16.

RSA_SIGN_HASH führt die PSS-Kodierung des zu signierenden message_digest durch und signiert mit dem privaten RSA-Schlüssel.

Caution

Diese Funktion erwartet den Hash einer Nachricht (oder Message Digest), nicht die eigentliche Nachricht.Das Argument hash sollte den Algorithmus angeben, der auch verwendet wurde, um diesen Hash zu generieren.

Eine Funktion, die die eigentliche Nachricht zum Hash akzeptiert, könnte in einer zukünftigen Version von Firebird eingeführt werden.

PSS-Enkodierung

Probabilistic Signature Scheme (PSS) ist ein kryptografisches Signaturschema, das speziell entwickelt wurde, um moderne Methoden der Sicherheitsanalyse zu ermöglichen, um zu beweisen, dass seine Sicherheit direkt mit der des RSA-Problems zusammenhängt.Es gibt keinen solchen Beweis für das traditionelle PKCS#1 v1.5-Schema.

RSA_SIGN_HASH-Beispiele

Tip

Führen Sie zuerst das Beispiel der Funktion RSA_PRIVATE aus.

select rdb$set_context('USER_SESSION', 'msg',
  rsa_sign_hash(crypt_hash('Test message' using sha256)
    key rdb$get_context('USER_SESSION', 'private_key'))) from rdb$database;

RSA_VERIFY_HASH()

Verfügbar in

DSQL, PSQL

Rückgabetyp

BOOLEAN

Syntax
RSA_VERIFY_HASH (message_digest
  SIGNATURE signature KEY public_key
  [HASH <hash>] [SALT_LENGTH salt_length]
  [PKCS_1_5])

<hash> ::= MD5 | SHA1 | SHA256 | SHA512
Table 1. RSA_VERIFY-Funktionsparameter
Parameter Beschreibung

message_digest

Hash der zu überprüfenden Nachricht.Der verwendete Hash-Algorithmus sollte mit hash übereinstimmen.

signature

Erwartete Signatur von input generiert von RSA_SIGN_HASH

public_key

öffentlicher RSA-Schlüssel im PKCS#1-Format, der dem zum Signieren verwendeten privaten Schlüssel entspricht

hash

Hash für den Message Digest;Standard ist SHA256.Dies sollte derselbe Hash sein, der zum Generieren von message_digest und in RSA_SIGN_HASH verwendet wird

salt_length

Länge des Salts in Bytes;Standard ist 8;mindestens 1, maximal 32.Der Wert muss der in RSA_SIGN_HASH verwendeten Länge entsprechen.

RSA_VERIFY_HASH führt die PSS-Kodierung des zu verifizierenden message_digest durch und verifiziert die digitale Signatur unter Verwendung des bereitgestellten öffentlichen RSA-Schlüssels.

Standardmäßig wird OAEP-Padding verwendet.Die Option PKCS_1_5 wechselt zum weniger sicheren PKCS 1.5-Padding.Diese Option wurde in Firebird 4.0.1 eingeführt.

Warning

Die Option PKCS_1_5 dient nur der Abwärtskompatibilität mit Systemen, die PKCS 1.5-Padding verwenden.Aus Sicherheitsgründen sollte es nicht in neuen Projekten verwendet werden.

Caution

Diese Funktion erwartet den Hash einer Nachricht (oder Message Digest), nicht die eigentliche Nachricht.Das Argument hash sollte den Algorithmus angeben, der auch verwendet wurde, um diesen Hash zu generieren.

Eine Funktion, die die eigentliche Nachricht zum Hash akzeptiert, könnte in einer zukünftigen Version von Firebird eingeführt werden.

RSA_VERIFY_HASH-Beispiele

Tip

Führen Sie die Beispiele RSA_PRIVATE-, RSA_PUBLIC- und [fblangref40-scalarfuncs-rsasignhash-exmpl-de]-Funktionen zuerst aus.

select rsa_verify_hash(
  crypt_hash('Test message' using sha256)
  signature rdb$get_context('USER_SESSION', 'msg')
  key rdb$get_context('USER_SESSION', 'public_key'))
from rdb$database

Weitere Funktionen

Funktionen, die in keine andere Kategorie passen.

MAKE_DBKEY()

Verfügbar in

DSQL, PSQL

Rückgabetyp

BINARY(8)

Syntax
MAKE_DBKEY (relation, recnum [, dpnum [, ppnum]])
Table 1. MAKE_DBKEY-Funktionsparameter
Parameter Beschreibung

relation

Relationsname oder Relations-ID

recnum

Datensatznummer.Entweder absolut (wenn dpnum und ppnum fehlen) oder relativ (wenn dpnum vorhanden)

dpnum

Datenseitennummer.Entweder absolut (wenn ppnum nicht vorhanden ist) oder relativ (wenn ppnum vorhanden ist)

ppnum

Seitennummer des Zeigers.

MAKE_DBKEY erstellt einen DBKEY-Wert unter Verwendung eines Beziehungsnamens oder einer ID, einer Datensatznummer und (optional) einer logischen Nummer der Datenseite und der Zeigerseite.

Note
  1. Wenn relation ein Zeichenfolgenausdruck oder ein Literal ist, wird es als Beziehungsname behandelt und die Engine sucht nach der entsprechenden Beziehungs-ID.Bei der Suche wird die Groß-/Kleinschreibung beachtet.Im Fall eines Zeichenfolgenliterals wird die Beziehungs-ID zum Zeitpunkt der Abfragevorbereitung ausgewertet.Im Fall von expression wird die Beziehungs-ID zur Ausführungszeit ausgewertet.Wenn die Relation nicht gefunden werden kann, wird der Fehler isc_relnotdef ausgegeben.

  2. Wenn relation ein numerischer Ausdruck oder ein Literal ist, dann wird es als Relations-ID behandelt und "wie besehen" verwendet, ohne Prüfung gegen bestehende Beziehungen.Wenn der Argumentwert negativ oder größer als die maximal zulässige Beziehungs-ID (derzeit 65535) ist, wird NULL zurückgegeben.

  3. Das Argument recnum stellt eine absolute Datensatznummer in der Relation dar (wenn die nächsten Argumente dpnum und ppnum fehlen) oder eine Datensatznummer relativ zum ersten Datensatz, angegeben durch die nächsten Argumente.

  4. Das Argument dpnum ist eine logische Nummer der Datenseite in der Relation (wenn das nächste Argument ppnum fehlt) oder die Anzahl der Datenseiten relativ zur ersten Datenseite, die durch die angegebene ppnum adressiert wird.

  5. Argument ppnum ist eine logische Nummer der Zeigerseite in der Relation.

  6. Alle Zahlen sind nullbasiert.Der maximal zulässige Wert für dpnum und ppnum ist 232 (4294967296).Wenn dpnum angegeben ist, kann recnum negativ sein.Wenn dpnum fehlt und recnum negativ ist, wird NULL zurückgegeben.Wenn ppnum angegeben ist, kann dpnum negativ sein.Wenn ppnum fehlt und dpnum negativ ist, wird NULL zurückgegeben.

  7. Wenn eines der angegebenen Argumente NULL ist, ist das Ergebnis ebenfalls NULL.

  8. Das Argument relation wird während der Abfragevorbereitung als INTEGER beschrieben, kann aber von einer Client-Anwendung als VARCHAR oder CHAR überschrieben werden.Die Argumente recnum, dpnum und ppnum werden als BIGINT beschrieben.

Beispiele für MAKE_DBKEY

  1. Wählen Sie den Datensatz mit dem Beziehungsnamen aus (beachten Sie, dass der Beziehungsname in Großbuchstaben geschrieben ist)

    select *
    from rdb$relations
    where rdb$db_key = make_dbkey('RDB$RELATIONS', 0)
  2. Datensatz mit Beziehungs-ID auswählen

    select *
    from rdb$relations
    where rdb$db_key = make_dbkey(6, 0)
  3. Wählen Sie alle Datensätze aus, die sich physisch auf der ersten Datenseite befinden

    select *
    from rdb$relations
    where rdb$db_key >= make_dbkey(6, 0, 0)
    and rdb$db_key < make_dbkey(6, 0, 1)
  4. Wählen Sie alle Datensätze aus, die sich physisch auf der ersten Datenseite der 6. Zeigerseite befinden

    select *
    from SOMETABLE
    where rdb$db_key >= make_dbkey('SOMETABLE', 0, 0, 5)
    and rdb$db_key < make_dbkey('SOMETABLE', 0, 1, 5)

RDB$ERROR()

Verfügbar in

PSQL

Rückgabetyp

Variiert (siehe Tabelle unten)

Syntax
RDB$ERROR (<context>)

<context> ::=
  GDSCODE | SQLCODE | SQLSTATE | EXCEPTION | MESSAGE
Table 1. Kontexte
Kontext Rückgabetyp Beschreibung

GDSCODE

INTEGER

Firebird-Fehlercode, siehe auch GDSCODE

SQLCODE

INTEGER

(veraltet) SQL-Code, siehe auch SQLCODE

SQLSTATE

CHAR(5) CHARACTER SET ASCII

SQLstate, siehe auch SQLSTATE

EXCEPTION

VARCHAR(63) CHARACTER SET UTF8

Name der aktiven benutzerdefinierten Ausnahme oder NULL, wenn die aktive Ausnahme eine Systemausnahme ist

MESSAGE

VARCHAR(1024) CHARACTER SET UTF8

Nachrichtentext der aktiven Ausnahme

RDB$ERROR gibt Daten des angegebenen Kontexts über die aktive PSQL-Ausnahme zurück.Sein Geltungsbereich ist auf Ausnahmebehandlungsblöcke in PSQL beschränkt (WHEN …​ DO).Außerhalb der Ausnahmebehandlungsblöcke gibt RDB$ERROR immer NULL zurück.Diese Funktion kann nicht aus DSQL aufgerufen werden.

Beispiel für RDB$ERROR

BEGIN
  ...
WHEN ANY DO
  EXECUTE PROCEDURE P_LOG_EXCEPTION(RDB$ERROR(MESSAGE));
END

RDB$GET_TRANSACTION_CN()

Verfügbar in

DSQL, PSQL

Rückgabetyp

BIGINT

Syntax
RDB$GET_TRANSACTION_CN (transaction_id)
Table 1. RDB$GET_TRANSACTION_CN-Funktionsparameter
Parameter Beschreibung

transaction_id

Transaktions-ID

RDB$GET_TRANSACTION_CN gibt die Commit-Nummer (“CN”) der übergebenen Transaktion zurück.

Wenn der Rückgabewert größer als 1 ist, ist dies der tatsächliche CN der Transaktion, wenn sie nach dem Start der Datenbank festgeschrieben wurde.

Die Funktion kann auch eines der folgenden Ergebnisse zurückgeben, das den Commit-Status der Transaktion angibt:

-2

Transaktion ist tot (zurückgerollt)

-1

Transaktion ist in der Schwebe

 0

Transaktion ist aktiv

 1

Transaktion, die vor dem Start der Datenbank festgeschrieben wurde oder weniger als die älteste interessante Transaktion für die Datenbank ist

NULL

Die angegebene Transaktionsnummer ist NULL oder größer als Nächste Transaktion für die Datenbank

Note

Weitere Informationen zu CN finden Sie in den Firebird 4.0 Release Notes.

RDB$GET_TRANSACTION_CN-Beispiele

select rdb$get_transaction_cn(current_transaction) from rdb$database;
select rdb$get_transaction_cn(123) from rdb$database;

RDB$ROLE_IN_USE()

Verfügbar in

DSQL, PSQL

Rückgabetyp

BOOLEAN

Syntax
RDB$ROLE_IN_USE (role_name)
Table 1. RDB$ROLE_IN_USE-Funktionsparameter
Parameter Beschreibung

role_name

Zeichenfolgenausdruck für die zu prüfende Rolle.Groß-/Kleinschreibung muss mit dem in RDB$ROLES gespeicherten Rollennamen übereinstimmen

RDB$ROLE_IN_USE gibt TRUE zurück, wenn die angegebene Rolle für die aktuelle Verbindung aktiv ist, andernfalls FALSE.Im Gegensatz zu CURRENT_ROLE — das nur die explizit angegebene Rolle zurückgibt — kann diese Funktion verwendet werden, um nach Rollen zu suchen, die standardmäßig aktiv sind, oder auf kumulative Rollen, die von einem explizit aktiviert wurden angegebene Rolle.

RDB$ROLE_IN_USE-Beispiel

Aktuell aktive Rollen auflisten
select rdb$role_name
from rdb$database
where rdb$role_in_use(rdb$role_name);
Siehe auch

CURRENT_ROLE

RDB$SYSTEM_PRIVILEGE()

Verfügbar in

DSQL, PSQL

Rückgabetyp

BOOLEAN

Syntax
RDB$SYSTEM_PRIVILEGE (<sys_privilege>)

<sys_privilege> ::=
  !! Siehe auch CREATE ROLE !!
Table 1. RDB$SYSTEM_PRIVILEGE-Funktionsparameter
Parameter Beschreibung

sys_privilege

Systemprivileg

RDB$SYSTEM_PRIVILEGE akzeptiert einen Systemprivilegnamen und gibt TRUE zurück, wenn der aktuelle Anhang das angegebene Systemprivileg hat, andernfalls FALSE.

RDB$SYSTEM_PRIVILEGE-Beispiel

select rdb$system_privilege(user_management) from rdb$database;

Mathematische Funktionen

ABS()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

Numerisch

Syntax
ABS (number)
Table 1. ABS-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

Gibt den absoluten Wert des Arguments zurück.

COS()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
COS (angle)
Table 1. COS-Funktionsparameter
Parameter Beschreibung

angle

Ein Winkel im Bogenmaß

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

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

COSH()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
COSH (number)
Table 1. COSH-Funktionsparameter
Parameter Beschreibung

number

Eine Zahl eines numerischen Typs

Gibt den hyperbolischen Kosinus des Arguments zurück.

  • Jedes Ergebnis, das nicht NULL ist, liegt im Bereich [1, INF].

COT()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
COT (angle)
Table 1. COT-Funktionsparameter
Parameter Beschreibung

angle

Ein Winkel im Bogenmaß

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

EXP()

Verfügbar in

DSQL, PSQL

Ergebnistyp

DOUBLE PRECISION

Syntax
EXP (number)
Table 1. EXP-Funktionsparameter
Parameter Beschreibung

number

Eine Zahl eines numerischen Typs

Gibt die natürliche Exponentialfunktion zurück, enumber

FLOOR()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

BIGINT für genaue numerische number, oder DOUBLE PRECISION für fließkommagenaue number

Syntax
FLOOR (number)
Table 1. FLOOR-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

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

LN()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
LN (number)
Table 1. LN-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

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

  • Ein Fehler wird ausgegeben, wenn das Argument negativ oder 0 ist.

LOG()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
LOG (x, y)
Table 1. LOG-Funktionsparameter
Parameter Beschreibung

x

Basis.Ein Ausdruck eines numerischen Typs

y

Ein Ausdruck eines numerischen Typs

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

  • Wenn eines der Argumente 0 oder kleiner ist, wird ein Fehler ausgegeben.(Vor 2.5 würde dies NaN, +/-INF oder 0 ergeben, abhängig von den genauen Werten der Argumente.)

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

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

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

LOG10()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
LOG10 (number)
Table 1. LOG10-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

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

  • Ein Fehler wird ausgegeben, wenn das Argument negativ oder 0 ist.(In Versionen vor 2.5 würden solche Werte zu NaN bzw. -INF führen.)

MOD()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

SMALLINT, INTEGER oder BIGINT je nach Typ von a.Wenn a ein Gleitkommatyp ist, ist das Ergebnis ein BIGINT.

Syntax
MOD (a, b)
Table 1. MOD-Funktionsparameter
Parameter Beschreibung

a

Ein Ausdruck eines numerischen Typs

b

Ein Ausdruck eines numerischen Typs

Gibt den Rest einer ganzzahligen Division zurück.

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

PI()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
PI ()

Gibt eine Annäherung an den Wert von pi zurück.

ACOS()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
ACOS (number)
Table 1. ACOS-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs im Bereich [-1, 1]

Gibt den Arkuskosinus des Arguments zurück.

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

POWER()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
POWER (x, y)
Table 1. POWER-Funktionsparameter
Parameter Beschreibung

x

Ein Ausdruck eines numerischen Typs

y

Ein Ausdruck eines numerischen Typs

Gibt x hoch y (xy) zurück.

RAND()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
RAND ()

Gibt eine Zufallszahl zwischen 0 und 1 zurück.

ROUND()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

INTEGER, (skaliert) BIGINT oder DOUBLE PRECISION

Syntax
ROUND (number [, scale])
Table 1. ROUND-Funktionsparameter
Parameter Description

number

Ein Ausdruck eines numerischen Typs

scale

Eine ganze Zahl, die die Anzahl der Nachkommastellen 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

Rundet eine Zahl auf die nächste ganze Zahl.Wenn der Bruchteil genau '0,5' ist, wird bei positiven Zahlen nach oben und bei negativen Zahlen nach unten gerundet.Mit dem optionalen Argument scale kann die Zahl auf Zehnerpotenzen (Zehner, Hunderter, Zehntel, Hundertstel usw.) statt auf ganze Zahlen gerundet werden.

Important

Wenn Sie an das Verhalten der externen Funktion ROUND gewöhnt sind, beachten Sie bitte, dass die Funktion internal von Null immer auf Hälften rundet, d.h. bei negativen Zahlen nach unten.

ROUND-Beispiele

Wenn das Argument scale vorhanden ist, hat das Ergebnis normalerweise die gleiche Skalierung wie das erste Argument:

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

Andernfalls ist die Ergebnisskalierung 0:

ROUND(45.1212) -- Ergebnis 45

SIGN()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

SMALLINT

Syntax
SIGN (number)
Table 1. SIGN-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

Gibt das Vorzeichen des Arguments zurück: -1, 0 oder 1.

SIN()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
SIN (angle)
Table 1. SIN-Funktionsparameter
Parameter Beschreibung

angle

Ein Winkel im Bogenmaß

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

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

SINH()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
SINH (number)
Table 1. SINH-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

Gibt den hyperbolischen Sinus des Arguments zurück.

SQRT()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
SQRT (number)
Table 1. SQRT-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

Gibt die Quadratwurzel des Arguments zurück.

  • Wenn number negativ ist, wird ein Fehler ausgegeben.

TAN()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
TAN (angle)
Table 1. TAN-Funktionsparameter
Parameter Beschreibung

angle

Ein Winkel im Bogenmaß

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

TANH()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
TANH (number)
Table 1. TANH-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

Gibt den hyperbolischen Tangens des Arguments zurück.

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

TRUNC()

Verfügbar in

DSQL, PSQL

Ergebnistyp

INTEGER, (scaled) BIGINT or DOUBLE PRECISION

Syntax
TRUNC (number [, scale])
Table 1. TRUNC-Funktionsparameter
Parameter Description

number

Ein Ausdruck eines numerischen Typs

scale

Eine ganze Zahl, die die Anzahl der Dezimalstellen angibt, auf die abgeschnitten werden soll, z. B.:

  •  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

Gibt den ganzzahligen Teil einer Zahl zurück.Mit dem optionalen Argument scale kann die Zahl auf Zehnerpotenzen (Zehner, Hunderter, Zehntel, Hundertstel usw.) statt auf ganze Zahlen gekürzt werden.

Note
  • Wenn das Argument scale vorhanden ist, hat das Ergebnis normalerweise die gleiche Skala wie das erste Argument, z.

    • TRUNC(789.2225, 2) gibt 789.2200 (nicht 789.22) zurück

    • TRUNC(345.4, -2) gibt 300.0 (nicht 300) zurück

    • TRUNC(-163.41, 0) gibt -163.00 (nicht -163) zurück

  • Andernfalls ist die Ergebnisskala 0:

    • TRUNC(-163.41) gibt -163 zurück

Important

Wenn Sie an das Verhalten der externen Funktion TRUNCATE gewöhnt sind, beachten Sie bitte, dass die interne Funktion TRUNC immer gegen Null abschneidet, d.h. für negative Zahlen nach oben.

ACOSH()

Verfügbar in

DSQL, PSQL

Ergebnistyp

DOUBLE PRECISION

Syntax
ACOSH (number)
Table 1. ACOSH-Funktionsparameter
Parameter Beschreibung

number

Jeder Nicht-NULL-Wert im Bereich [1, INF].

Gibt den inversen hyperbolischen Kosinus des Arguments zurück.

  • Das Ergebnis liegt im Bereich [0, INF].

ASIN()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
ASIN (number)
Table 1. ASIN-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs im Bereich [-1, 1]

Gibt den Arkussinus des Arguments zurück.

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

ASINH()

Verfügbar in

DSQL, PSQL

Ergebnistyp

DOUBLE PRECISION

Syntax
ASINH (number)
Table 1. ASINH-Funktionsparameter
Parameter Beschreibung

number

Jeder Nicht-NULL-Wert im Bereich [-INF, INF].

Gibt den inversen hyperbolischen Sinus des Arguments zurück.

  • Das Ergebnis liegt im Bereich [-INF, INF].

ATAN()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
ATAN (number)
Table 1. ATAN-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

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

ATAN2()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

DOUBLE PRECISION

Syntax
ATAN2 (y, x)
Table 1. ATAN2-Funktionsparameter
Parameter Beschreibung

y

Ein Ausdruck eines numerischen Typs

x

Ein Ausdruck eines numerischen Typs

Gibt den Winkel zurück, dessen Sinus-zu-Cosinus-Verhältnis durch die beiden Argumente gegeben ist und dessen Sinus- und Kosinus-Vorzeichen 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].

  • Wenn x negativ ist, ist das Ergebnis pi, wenn y 0 ist, und -pi, wenn y -0 ist.

  • Wenn sowohl y als auch x 0 sind, ist das Ergebnis bedeutungslos.Ein Fehler wird ausgegeben, wenn beide Argumente 0 sind.

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

  • Wenn x größer als 0 ist, ist ATAN2(y, x) dasselbe wie ATAN(y/x).

  • Wenn sowohl Sinus als auch Kosinus des Winkels bereits bekannt sind, gibt ATAN2(sin, cos) den Winkel an.

ATANH()

Verfügbar in

DSQL, PSQL

Ergebnistyp

DOUBLE PRECISION

Syntax
ATANH (number)
Table 1. ATANH-Funktionsparameter
Parameter Beschreibung

number

Jeder Nicht-NULL-Wert im Bereich <-1, 1>.

Gibt den inversen hyperbolischen Tangens des Arguments zurück.

  • Das Ergebnis ist eine Zahl im Bereich [-INF, INF].

CEIL(), CEILING()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen (Betrifft nur CEILING)

Ergebnistyp

BIGINT für exakte numerische Zahl oder DOUBLE PRECISION für Gleitkomma-Zahl

Syntax
CEIL[ING] (number)
Table 1. CEIL[ING]-Funktionsparameter
Parameter Beschreibung

number

Ein Ausdruck eines numerischen Typs

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

String- und Binärfunktionen

ASCII_CHAR()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

CHAR(1) CHARACTER SET NONE

Syntax
ASCII_CHAR (code)
Table 1. ASCII_CHAR-Funktionsparameter
Parameter Beschreibung

code

Eine ganze Zahl im Bereich von 0 bis 255

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

Important
  • Wenn Sie das Verhalten des ASCII_CHAR-UDF gewohnt sind, das einen leeren String 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.

HEX_DECODE()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY oder BLOB

Syntax
HEX_DECODE (hex_data)
Table 1. HEX_DECODE-Funktionsparameter
Parameter Beschreibung

hex_data

Hex-kodierte Daten

HEX_DECODE decodiert einen String mit Hex-codierten Daten und gibt den decodierten Wert als VARBINARY oder BLOB entsprechend der Eingabe zurück.Wenn die Länge des Typs von hex_data kein Vielfaches von 2 ist, wird zur Vorbereitungszeit ein Fehler ausgegeben.Wenn die Länge des Wertes von hex_data kein Vielfaches von 2 ist, wird zur Ausführungszeit ein Fehler ausgegeben.

Wenn die Eingabe nicht 'BLOB' ist, wird die Länge des resultierenden Typs als 'type_length / 2' berechnet, wobei type_length die maximale Länge in Zeichen des Eingabetyps ist.

Beispiel für HEX_DECODE

select cast(hex_decode('48657861646563696D616C') as varchar(12))
from rdb$database;

CAST
============
Hexadecimal

HEX_ENCODE()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARCHAR CHARACTER SET ASCII oder BLOB SUB_TYPE TEXT CHARACTER SET ASCII

Syntax
HEX_ENCODE (binary_data)
Table 1. HEX_ENCODE-Funktionsparameter
Parameter Beschreibug

binary_data

Binäre Daten (oder anderweitig in Binär umwandelbar) zum Codieren

HEX_ENCODE codiert binary_data mit Hex und gibt den codierten Wert als VARCHAR CHARACTER SET ASCII oder BLOB SUB_TYPE TEXT CHARACTER SET ASCII entsprechend der Eingabe zurück.

Wenn die Eingabe nicht 'BLOB' ist, wird die Länge des resultierenden Typs als 'type_length * 2' berechnet, wobei type_length die maximale Länge in Bytes des Eingabetyps ist.Überschreitet diese Länge die maximale Länge von VARCHAR, gibt die Funktion ein BLOB zurück.

Beispiel für HEX_ENCODE

select hex_encode('Hexadecimal')
from rdb$database;

HEX_ENCODE
======================
48657861646563696D616C

LEFT()

Verfügbar in

DSQL, PSQL

Ergebnistyp

VARCHAR oder BLOB

Syntax
LEFT (string, length)
Table 1. LEFT-Funktionsparameter
Parameter Beschreibung

string

Ein Ausdruck eines String-Typs

length

Ganzzahliger Ausdruck.Definiert die Anzahl der zurückzugebenden Zeichen

Gibt den äußersten linken Teil der Argumentzeichenfolge zurück.Die Anzahl der Zeichen wird im zweiten Argument angegeben.

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

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

  • Wenn das Argument length die Stringlänge überschreitet, wird der Eingabestring unverändert zurückgegeben.

  • Wenn das Argument length keine ganze Zahl ist, wird Banker-Rundung (auf gerade) angewendet, d. h. 0,5 wird zu 0, 1,5 wird zu 2, 2,5 wird zu 2, 3,5 wird zu 4 usw.

LOWER()

Verfügbar in

DSQL, ESQL, PSQL

Möglicher Namenskonflikt

YES → Lesen Sie die Details unten

Ergebnistyp

(VAR)CHAR, (VAR)BINARY oder BLOB

Syntax
LOWER (string)
Table 1. LOWER-FunktionsparameterS
Parameter Beschreibung

string

Ein Ausdruck eines String-Typs

Gibt das Äquivalent der Eingabezeichenfolge in Kleinbuchstaben zurück.Das genaue Ergebnis hängt vom Zeichensatz ab.Bei ASCII oder NONE beispielsweise werden nur ASCII-Zeichen kleingeschrieben;mit OCTETS wird der gesamte String unverändert zurückgegeben.Seit Firebird 2.1 unterstützt diese Funktion auch Text-BLOBs beliebiger Länge und beliebigem Zeichensatz.

Note
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 (minderwertige!) externe Funktion aufzurufen, verwenden Sie doppelte Anführungszeichen und die genaue Großschreibung, wie in "LOWER"(string).

LOWER-Beispiele

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

LPAD()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

VARCHAR oder BLOB

Syntax
LPAD (str, endlen [, padstr])
Table 1. LPAD-Funktionsparameter
Parameter Beschreibung

str

Ein Ausdruck eines String-Typs

endlen

Länge der Ausgabezeichenfolge

padstr

Das Zeichen oder die Zeichenfolge, die verwendet werden soll, um die Quellzeichenfolge bis zur angegebenen Länge aufzufüllen.Standard ist Leerzeichen (“' '”)

Füllt eine Zeichenfolge mit der linken Maustaste mit Leerzeichen oder mit einer vom Benutzer angegebenen Zeichenfolge auf, bis eine bestimmte Länge erreicht ist.

  • Diese Funktion unterstützt vollständig Text BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

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

  • Wenn padstr angegeben ist und gleich '' (leerer String) ist, findet kein Auffüllen statt.

  • Wenn endlen kleiner als die aktuelle Stringlänge ist, wird der String auf endlen gekürzt, auch wenn padstr der leere String ist.

Note

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 umzuwandeln.Dies ist nicht mehr der Fall.

Warning

Bei Verwendung auf einem 'BLOB' muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Obwohl es versucht, den Speicherverbrauch zu begrenzen, kann dies die Leistung beeinträchtigen, wenn es um große BLOBs geht.

LPAD-Beispiele

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

OCTET_LENGTH()

Verfügbar in

DSQL, PSQL

Ergebnistyp

INTEGER

Syntax
OCTET_LENGTH (string)
Table 1. OCTET_LENGTH-Funktionsparameter
Parameter Beschreibung

string

Ein Ausdruck eines String-Typs

Gibt die Länge des Eingabestrings in Bytes (Oktetts) an.Bei Mehrbyte-Zeichensätzen kann dies kleiner sein als die Anzahl der Zeichen mal der “formalen” Anzahl von Bytes pro Zeichen, wie in RDB$CHARACTER_SETS gefunden.

Note

Bei Argumenten vom Typ CHAR oder BINARY berücksichtigt diese Funktion die gesamte formale Stringlänge (d.h. die deklarierte Länge eines Feldes oder einer Variablen).Wenn Sie die “logische” Bytelänge erhalten möchten, ohne die abschließenden Leerzeichen zu zählen, rechts-TRIM das Argument vor der Übergabe an OCTET_LENGTH.

BLOB-Unterstützung

Seit Firebird 2.1 unterstützt diese Funktion vollständig Text-BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

OCTET_LENGTH-Beispiele

select octet_length('Hello!') from rdb$database
-- Ergebnis 6

select octet_length(_iso8859_1 'Grüß di!') from rdb$database
-- Ergebnis 8: ü und ß belegen in ISO8859_1 jeweils ein Byte

select octet_length
  (cast (_iso8859_1 'Grüß di!' as varchar(24) character set utf8))
from rdb$database
-- Ergebnis 10: ü und ß belegen in UTF8 jeweils zwei Byte

select octet_length
  (cast (_iso8859_1 'Grüß di!' as char(24) character set utf8))
from rdb$database
-- Ergebnis 26: alle 24 CHAR-Positionen zählen, und zwei davon sind 2-Byte

OVERLAY()

Verfügbar in

DSQL, PSQL

Ergebnistyp

VARCHAR oder BLOB

Syntax
OVERLAY (string PLACING replacement FROM pos [FOR length])
Table 1. OVERLAY-Funktionsparameter
Parameter Beschreibung

string

Die Zeichenfolge, in die die Ersetzung erfolgt

replacement

Ersetzende Zeichenkette

pos

Die Position, von der aus ersetzt wird (Ausgangsposition)

length

Die Anzahl der zu überschreibenden Zeichen

OVERLAY() überschreibt einen Teil eines Strings mit einem anderen String.Standardmäßig entspricht die Anzahl der aus der Hostzeichenfolge entfernten (überschriebenen) Zeichen der Länge der Ersetzungszeichenfolge.Mit dem optionalen vierten Argument kann eine andere Anzahl von Zeichen zum Entfernen angegeben werden.

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

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

  • Wie bei SQL-Stringfunktionen üblich, ist pos 1-basiert.

  • Wenn pos hinter dem Ende von string steht, wird replacement direkt nach string platziert.

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

  • Eine “FOR 0”-Klausel bewirkt, dass replacement einfach in string eingefügt wird.

  • Wenn ein Argument NULL ist, ist das Ergebnis NULL.

  • Wenn pos oder length keine ganze Zahl ist, wird Banker-Rundung (auf-gerade) angewendet, d. h. 0,5 wird zu 0, 1,5 wird zu 2, 2,5 wird zu 2, 3,5 wird zu 4 usw.

Warning

Bei Verwendung auf einem 'BLOB' muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Dies kann die Leistung beeinträchtigen, wenn es um große BLOBs geht.

OVERLAY-Beispiele

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

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

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

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

POSITION()

Verfügbar in

DSQL, PSQL

Ergebnistyp

INTEGER

Syntax
  POSITION (substr IN string)
| POSITION (substr, string [, startpos])
Table 1. POSITION-Funktionsparameter
Parameter Beschreibung

substr

Der Teilstring, dessen Position gesucht werden soll

string

Der zu suchende String

startpos

Die Position in string, an der die Suche beginnen soll

Gibt die (1-basierte) Position des ersten Vorkommens einer Teilzeichenfolge in einer Hostzeichenfolge zurück.Mit dem optionalen dritten Argument beginnt die Suche an einem bestimmten Offset, wobei alle Übereinstimmungen ignoriert werden, die früher in der Zeichenfolge auftreten können.Wenn keine Übereinstimmung gefunden wird, ist das Ergebnis 0.

Note
  • Das optionale dritte Argument wird nur in der zweiten Syntax (Komma-Syntax) unterstützt.

  • Die leere Zeichenfolge wird als Teilzeichenfolge jeder Zeichenfolge betrachtet.Wenn also substr '' (leerer String) ist und string nicht NULL ist, ist das Ergebnis:

    • 1 wenn startpos nicht angegeben ist;

    • startpos wenn startpos innerhalb von string liegt;

    • 0, wenn startpos hinter dem Ende von string liegt.

    Hinweis: Ein Fehler in Firebird 2.1 - 2.1.3 und 2.5.0 führt dazu, dass POSITION immer 1 zurückgibt, wenn substr der leere String ist.Dies ist in 2.1.4 und 2.5.1 behoben.

  • Diese Funktion unterstützt vollständig Text-BLOBs jeder Größe und jedes Zeichensatzes.

Warning

Bei Verwendung auf einem 'BLOB' muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Dies kann die Leistung beeinträchtigen, wenn es um große BLOBs geht.

POSITION-Beispiele

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

REPLACE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

VARCHAR oder BLOB

Syntax
REPLACE (str, find, repl)
Table 1. REPLACE-Funktionsparameter
Parameter Beschreibung

str

Die Zeichenfolge, in der die Ersetzung erfolgen soll

find

Die Zeichenfolge, nach der gesucht werden soll

repl

Die Ersatzzeichenfolge

Ersetzt alle Vorkommen einer Teilzeichenfolge in einer Zeichenfolge.

  • Diese Funktion unterstützt vollständig Text BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

  • Wenn ein Argument ein BLOB ist, ist das Ergebnis ein BLOB.Andernfalls ist das Ergebnis ein VARCHAR(n) mit n, das aus den Längen von str, find und repl so berechnet wird, dass auch die maximal mögliche Anzahl von Ersetzungen das Feld nicht überläuft.

  • Wenn find der leere String ist, wird str unverändert zurückgegeben.

  • Wenn repl der leere String ist, werden alle Vorkommen von find aus str gelöscht.

  • Wenn ein Argument NULL ist, ist das Ergebnis immer NULL, auch wenn nichts ersetzt worden wäre.

Warning

Bei Verwendung auf einem 'BLOB' muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Dies kann die Leistung beeinträchtigen, wenn es um große BLOBs geht.

REPLACE-Beispiele

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

REVERSE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

VARCHAR

Syntax
REVERSE (string)
Table 1. REVERSE-Funktionsparameter
Parameter Beschreibung

string

Ein Ausdruck eines String-Typs

Gibt eine Zeichenfolge rückwärts zurück.

REVERSE-Beispiele

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

Diese Funktion ist sehr praktisch, wenn Sie nach String-Endungen gruppieren, suchen oder sortieren möchten, z.B. beim Umgang mit Domainnamen 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');

ASCII_VAL()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

SMALLINT

Syntax
ASCII_VAL (ch)
Table 1. ASCII_VAL-Funktionsparameter
Parameter Beschreibung

ch

Ein String vom Datentyp [VAR]CHAR oder ein Text BLOB mit der maximalen Größe von 32.767 Bytes

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

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

  • Wenn das Argument ein leerer String ist, wird 0 zurückgegeben.

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

  • Wenn das erste Zeichen der Argumentzeichenfolge aus mehreren Byte besteht, wird ein Fehler ausgegeben.(Ein Fehler in Firebird 2.1 - 2.1.3 und 2.5.0 führt zu einem Fehler, wenn beliebiges Zeichen in der Zeichenfolge aus mehreren Byte besteht.Dies ist in den Versionen 2.1.4 und 2.5.1 behoben.)

RIGHT()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

VARCHAR oder BLOB

Syntax
RIGHT (string, length)
Table 1. RIGHT-Funktionsparameter
Parameter Beschreibung

string

Ein Ausdruck eines String-Typs

length

Integer.Definiert die Anzahl der zurückzugebenden Zeichen

Gibt den ganz rechten Teil der Argumentzeichenfolge zurück.Die Anzahl der Zeichen wird im zweiten Argument angegeben.

  • Diese Funktion unterstützt Text BLOB`s' beliebiger Länge, hat aber einen Fehler in den Versionen 2.1 - 2.1.3 und 2.5.0, der dazu führt, dass es bei Text BLOB``s fehlschlägt, die größer als 1024 Bytes sind, die ein Multi haben -Byte-Zeichensatz.Dies wurde in den Versionen 2.1.4 und 2.5.1 behoben.

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

  • Wenn das Argument length die Stringlänge überschreitet, wird der Eingabestring unverändert zurückgegeben.

  • Wenn das Argument Länge keine ganze Zahl ist, wird Banker-Rundung (auf-gerade) angewendet, d. h. 0,5 wird zu 0, 1,5 wird zu 2, 2,5 wird zu 2, 3,5 wird zu 4 usw.

Warning

Bei Verwendung auf einem 'BLOB' muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Dies kann die Leistung beeinträchtigen, wenn es um große BLOBs geht.

RPAD()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

VARCHAR oder BLOB

Syntax
RPAD (str, endlen [, padstr])
Table 1. RPAD-Funktionsparameter
Parameter Beschreibung

str

Ein Ausdruck eines String-Typs

endlen

Länge der Ausgabezeichenfolge

endlen

Das Zeichen oder die Zeichenfolge, die verwendet werden soll, um die Quellzeichenfolge bis zur angegebenen Länge aufzufüllen.Standard ist Leerzeichen (' ')

Füllt eine Zeichenfolge mit der rechten Maustaste mit Leerzeichen oder mit einer vom Benutzer angegebenen Zeichenfolge auf, bis eine bestimmte Länge erreicht ist.

  • Diese Funktion unterstützt vollständig Text BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

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

  • Wenn padstr angegeben ist und gleich '' (leerer String) ist, findet kein Auffüllen statt.

  • Wenn endlen kleiner als die aktuelle Stringlänge ist, wird der String auf endlen gekürzt, auch wenn padstr der leere String ist.

Note

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 umzuwandeln.Dies ist nicht mehr der Fall.

Warning

Bei Verwendung auf einem 'BLOB' muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Obwohl es versucht, den Speicherverbrauch zu begrenzen, kann dies die Leistung beeinträchtigen, wenn es um große BLOBs geht.

RPAD-Beispiele

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

SUBSTRING()

Verfügbar in

DSQL, PSQL

Ergebnistyps

VARCHAR oder BLOB

Syntax
SUBSTRING ( <substring-args> )

<substring-args> ::=
    str FROM startpos [FOR length]
  | str SIMILAR <similar-pattern> ESCAPE <escape>

<similar-pattern> ::=
  <similar-pattern-R1>
  <escape> " <similar-pattern-R2> <escape> "
  <similar-pattern-R3>
Table 1. SUBSTRING-Funktionsparameter
Parameter Beschreibung

str

Ein Ausdruck eines String-Typs

startpos

Ganzzahliger Ausdruck, die Position, von der aus mit dem Abrufen der Teilzeichenfolge begonnen werden soll

length

Die Anzahl der abzurufenden Zeichen nach dem startpos

similar-pattern

Muster für reguläre SQL-Ausdrücke, um nach der Teilzeichenfolge zu suchen

escape

Escape-Zeichen

Gibt die Teilzeichenfolge einer Zeichenfolge beginnend an der angegebenen Position zurück, entweder bis zum Ende der Zeichenfolge oder mit einer bestimmten Länge, oder extrahiert eine Teilzeichenfolge mithilfe eines Musters für reguläre SQL-Ausdrücke.

Wenn ein Argument NULL ist, ist das Ergebnis auch NULL.

Warning

Bei Verwendung auf einem BLOB muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Obwohl es versucht, den Speicherverbrauch zu begrenzen, kann dies die Leistung beeinträchtigen, wenn es um große BLOBs geht.

Positionsbezogener SUBSTRING

In ihrer einfachen Positionsform (mit FROM) gibt diese Funktion den Teilstring ab der Zeichenposition startpos zurück (das erste Zeichen ist 1).Ohne das Argument FOR gibt es alle verbleibenden Zeichen in der Zeichenfolge zurück.Bei FOR gibt es length Zeichen oder den Rest des Strings zurück, je nachdem welcher kürzer ist.

Seit Firebird 4.0 kann startpos kleiner als 1 sein.Wenn startpos kleiner als 1 ist, verhält sich Teilzeichenfolge so, als ob die Zeichenfolge 1 - startpos zusätzliche Positionen vor dem eigentlichen ersten Zeichen an Position 1 hätte.Die Länge wird von diesem imaginären Anfang der Zeichenfolge aus betrachtet, sodass die resultierende Zeichenfolge kürzer als die angegebene Länge oder sogar leer sein kann.

Die Funktion unterstützt vollständig binäre und Text BLOBs beliebiger Länge und mit jedem Zeichensatz.Wenn str ein BLOB ist, ist das Ergebnis auch ein BLOB.Bei jedem anderen Argumenttyp ist das Ergebnis ein VARCHAR.

Bei Nicht-BLOB-Argumenten entspricht die Breite des Ergebnisfelds immer der Länge von str, unabhängig von startpos und length.substring('pinhead' from 4 for 2) gibt also ein VARCHAR(7) zurück, das den String 'he' enthält.

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

select substring('abcdef' from 1 for 2) from rdb$database;
-- Ergebnis: 'ab'

select substring('abcdef' from 2) from rdb$database;
-- Ergebnis: 'bcdef'

select substring('abcdef' from 0 for 2) from rdb$database;
-- Ergebnis: 'a'
-- und NICHT 'ab', da "nichts" an Position 0 existiert

select substring('abcdef' from -5 for 2) from rdb$database;
-- Egebnis: ''
-- length endet vor dem eigentlichen Anfang des Strings

Regulärer Ausdruck SUBSTRING

In der Form des regulären Ausdrucks (mit SIMILAR) gibt die Funktion SUBSTRING einen Teil des Strings zurück, der einem Muster eines regulären SQL-Ausdrucks entspricht.Wenn keine Übereinstimmung gefunden wird, wird NULL zurückgegeben.

Das Muster "SIMILAR" wird aus drei Mustern für reguläre SQL-Ausdrücke gebildet, R1, R2 und R3.Das gesamte Muster hat die Form R1 || '<Escape>"' || R2 || '<Escape>"' || R3, wobei <escape> das in der ESCAPE-Klausel definierte Escape-Zeichen ist.R2 ist das Muster, das mit der zu extrahierenden Teilzeichenfolge übereinstimmt, und wird zwischen doppelten Anführungszeichen mit Escapezeichen eingeschlossen (<escape>", zB “#"” mit Escape-Zeichen ‘ ##+’).R1 entspricht dem Präfix des Strings und R3 dem Suffix des Strings.Sowohl R1 als auch R3 sind optional (sie können leer sein), aber das Muster muss mit der gesamten Zeichenfolge übereinstimmen.Mit anderen Worten, es reicht nicht aus, ein Muster anzugeben, das nur die zu extrahierende Teilzeichenfolge findet.

Tip

Die mit Escapezeichen versehenen doppelten Anführungszeichen um R2 können mit der Definition einer einzelnen Erfassungsgruppe in einer gängigeren Syntax für reguläre Ausdrücke wie PCRE verglichen werden.Das heißt, das vollständige Muster entspricht R1(R2)R3, das mit der gesamten Eingabezeichenfolge übereinstimmen muss, und die Erfassungsgruppe ist die zurückzugebende Teilzeichenfolge.

Note

Wenn einer von R1, R2 oder R3 keine Zeichenfolge der Länge Null ist und nicht das Format eines regulären SQL-Ausdrucks hat, wird eine Ausnahme ausgelöst.

Das vollständige Format für reguläre SQL-Ausdrücke wird in Syntax: Reguläre SQL-Ausdrücke beschrieben

Beispiele
substring('abcabc' similar 'a#"bcab#"c' escape '#')  -- bcab
substring('abcabc' similar 'a#"%#"c' escape '#')     -- bcab
substring('abcabc' similar '_#"%#"_' escape '#')     -- bcab
substring('abcabc' similar '#"(abc)*#"' escape '#')  -- abcabc
substring('abcabc' similar '#"abc#"' escape '#')     -- <null>

TRIM()

Verfügbar in

DSQL, PSQL

Ergebnistyp

VARCHAR or BLOB

Syntax
TRIM ([<adjust>] str)

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

<where> ::=  BOTH | LEADING | TRAILING
Table 1. TRIM-Funktionsparameter
Parameter Beschreibung

str

Ein Ausdruck eines String-Typs

where

Die Position, aus der der Teilstring entfernt werden soll — BOTH | LEADING | TRAILING.BOTH ist die Standardeinstellung

what

Die Teilzeichenfolge, die am Anfang, am Ende oder auf beiden Seiten der Eingabezeichenfolge str entfernt werden soll (mehrmals bei mehreren Übereinstimmungen).Standardmäßig ist es Leerzeichen (' ')

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 jeder Länge und jedes beliebigen Zeichensatzes.

Note

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

Warning

Bei Verwendung auf einem 'BLOB' muss diese Funktion möglicherweise das gesamte Objekt in den Speicher laden.Dies kann die Leistung beeinträchtigen, wenn es um große BLOBs geht.

TRIM-Beispiele

select trim ('  Waste no space   ') from rdb$database
-- Ergebnis 'Waste no space'

select trim (leading from '  Waste no space   ') from rdb$database
-- Ergebnis 'Waste no space   '

select trim (leading '.' from '  Waste no space   ') from rdb$database
-- Ergebnis '  Waste no space   '

select trim (trailing '!' from 'Help!!!!') from rdb$database
-- Ergebnis 'Help'

select trim ('la' from 'lalala I love you Ella') from rdb$database
-- Ergebnis ' I love you El'

select trim ('la' from 'Lalala I love you Ella') from rdb$database
-- Ergebnis 'Lalala I love you El'

UPPER()

Verfügbar in

DSQL, ESQL, PSQL

Ergebnistyp

(VAR)CHAR, (VAR)BINARY oder BLOB

Syntax
UPPER (str)
Table 1. UPPER-Funktionsparameter
Parameter Beschreibung

str

Ein Ausdruck eines String-Typs

Gibt das Äquivalent der Eingabezeichenfolge in Großbuchstaben zurück.Das genaue Ergebnis hängt vom Zeichensatz ab.Bei ASCII oder NONE beispielsweise werden nur ASCII-Zeichen groß geschrieben;mit dem Zeichensatz OCTETS/(VAR)BINARY wird der gesamte String unverändert zurückgegeben.Seit Firebird 2.1 unterstützt diese Funktion auch Text-BLOBs beliebiger Länge und beliebigem Zeichensatz.

UPPER-Beispiele

select upper(_iso8859_1 'Débâcle')
from rdb$database
-- Ergebnis 'DÉBÂCLE' (vor Firebird 2.0: 'DéBâCLE')

select upper(_iso8859_1 'Débâcle' collate fr_fr)
from rdb$database
-- Ergebnis 'DEBACLE', nach französischen Großbuchstabenregeln

BASE64_DECODE()

Verfügbar in

DSQL, PSQL

Egebnistyp

VARBINARY oder BLOB

Syntax
BASE64_DECODE (base64_data)
Table 1. BASE64_DECODE-Funktionsparameter
Parameter Beschreibung

base64_data

Base64-codierte Daten, aufgefüllt mit = auf Vielfaches von 4

BASE64_DECODE decodiert einen String mit base64-codierten Daten und gibt den decodierten Wert je nach Eingabe als VARBINARY oder BLOB zurück.Wenn die Länge des Typs von base64_data kein Vielfaches von 4 ist, wird zur Vorbereitungszeit ein Fehler ausgegeben.Wenn die Länge des Werts von base64_data kein Vielfaches von 4 ist, wird zur Ausführungszeit ein Fehler ausgegeben.

Wenn die Eingabe nicht BLOB ist, wird die Länge des resultierenden Typs als type_length * 3 / 4 berechnet, wobei type_length die maximale Länge in Zeichen des Eingabetyps ist.

Beispiel für BASE64_DECODE

select cast(base64_decode('VGVzdCBiYXNlNjQ=') as varchar(12))
from rdb$database;

CAST
============
Test base64

BASE64_ENCODE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

VARCHAR CHARACTER SET ASCII oder BLOB SUB_TYPE TEXT CHARACTER SET ASCII

Syntax
BASE64_ENCODE (binary_data)
Table 1. BASE64_ENCODE-Funktionsparameter
Parameter Beschreibung

binary_data

Binäre Daten (oder anderweitig in Binär umwandelbar) zum Codieren

BASE64_ENCODE codiert binary_data mit base64 und gibt den codierten Wert je nach Eingabe als VARCHAR CHARACTER SET ASCII oder BLOB SUB_TYPE TEXT CHARACTER SET ASCII zurück.Der zurückgegebene Wert wird mit ‘=’ aufgefüllt, sodass seine Länge ein Vielfaches von 4 ist.

Wenn die Eingabe nicht 'BLOB' ist, wird die Länge des resultierenden Typs berechnet als 'type_length * 4 / 3', aufgerundet auf ein Vielfaches von vier, wobei type_length die maximale Länge in Bytes des Eingabetyps ist.Überschreitet diese Länge die maximale Länge von VARCHAR, gibt die Funktion ein BLOB zurück.

Beispiel für BASE64_ENCODE

select base64_encode('Test base64')
from rdb$database;

BASE64_ENCODE
================
VGVzdCBiYXNlNjQ=

BIT_LENGTH()

Verfügbar in

DSQL, PSQL

Ergebnistyp

INTEGER

Syntax
BIT_LENGTH (string)
Table 1. BIT_LENGTH-Funktionsparameter
Parameter Beschreibung

string

Ein Ausdruck eines String-Typs

Gibt die Länge des Eingabestrings in Bits an.Bei Mehrbyte-Zeichensätzen kann dies kleiner sein als die Anzahl der Zeichen mal 8 mal die “formale” Anzahl von Bytes pro Zeichen wie in RDB$CHARACTER_SETS gefunden.

Note

Bei Argumenten vom Typ CHAR berücksichtigt diese Funktion die gesamte formale Stringlänge (d.h. die deklarierte Länge eines Feldes oder einer Variablen).Wenn Sie die “logische” Bitlänge erhalten möchten, ohne die abschließenden Leerzeichen zu zählen, rechts-TRIM das Argument vor der Übergabe an BIT_LENGTH.

BLOB-Unterstützung

Seit Firebird 2.1 unterstützt diese Funktion vollständig Text-BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

BIT_LENGTH-Beispiele

select bit_length('Hello!') from rdb$database
-- Ergebnis 48

select bit_length(_iso8859_1 'Grüß di!') from rdb$database
-- Ergebnis 64: ü und ß belegen in ISO8859_1 jeweils ein Byte

select bit_length
  (cast (_iso8859_1 'Grüß di!' as varchar(24) character set utf8))
from rdb$database
-- Ergebnis 80: ü und ß belegen in ISO8859_1 jeweils ein Byte

select bit_length
  (cast (_iso8859_1 'Grüß di!' as char(24) character set utf8))
from rdb$database
-- Ergebnis 208: alle 24 CHAR-Positionen zählen, und zwei davon sind 16-Bit

BLOB_APPEND()

Verfügbar in

DSQL, PSQL

Hinzugefügt in Version

4.0.2

Rückgabetyp

BLOB

Syntax
BLOB_APPEND(expr1, expr2 [, exprN ... ])
Table 1. BLOB_APPEND-Funktionsparameter
Parameter Beschreibung

exprN

Ein Ausdruck eines Typs, der in BLOB umwandelbar ist

Die BLOB_APPEND-Funktion verkettet Blobs, ohne zwischenzeitliche BLOBs zu erstellen, wodurch übermäßiger Speicherverbrauch und Wachstum der Datenbankdatei vermieden werden.Die Funktion BLOB_APPEND nimmt zwei oder mehr Argumente und fügt sie zu einem BLOB hinzu, der für eine weitere Modifikation durch einen nachfolgenden Aufruf von BLOB_APPEND offen bleibt.

Das resultierende BLOB wird zum Schreiben offen gelassen, anstatt geschlossen zu werden, wenn die Funktion zurückkehrt.Mit anderen Worten, das BLOB kann beliebig oft angehängt werden.Die Engine markiert das von BLOB_APPEND zurückgegebene BLOB mit einem internen Flag BLB_close_on_read und schließt es bei Bedarf automatisch.

Das erste Argument bestimmt das Verhalten der Funktion:

  1. NULL: neues, leeres BLOB SUB_TYPE TEXT CHARACTER SET NONE wird erstellt

    In Firebird 5.0 (und — vielleicht — Firebird 4.0.3) wird dies geändert, um den Verbindungszeichensatz anstelle von NONE zu verwenden.

  2. permanentes BLOB (aus einer Tabelle) oder temporäres BLOB, das bereits geschlossen war: neues BLOB SUB_TYPE TEXT wird erstellt, gefüllt mit dem Inhalt des ursprünglichen BLOB.Wenn das ursprüngliche BLOB SUB_TYPE TEXT ist, wird dessen Zeichensatz verwendet, andernfalls der Zeichensatz OCTETS.

    In Firebird 5.0 (und -– vielleicht -– Firebird 4.0.3) wird sich dies dahingehend ändern, dass der Untertyp des anfänglichen BLOB verwendet wird.

  3. temporäres, nicht geschlossenes BLOB mit dem BLB_close_on_read-Flag (z. B. erstellt durch einen anderen Aufruf von BLOB_APPEND): unverändert verwendet, verbleibende Argumente werden an dieses BLOB angehängt

  4. andere Datentypen: ein neuer BLOB SUB_TYPE TEXT wird erstellt, gefüllt mit dem ursprünglichen Argument, das in einen String umgewandelt wurde.Wenn der Originalwert ein Zeichentyp ist, wird dessen Zeichensatz verwendet (bei String-Literalen der Verbindungszeichensatz), ansonsten Zeichensatz NONE (wird in Firebird 5.0 und — vielleicht — Firebird 4.0.3 geändert, um den Verbindungszeichensatz zu verwenden).

Andere Argumente können von beliebigem Typ sein.Für sie ist folgendes Verhalten definiert:

  1. NULLs werden ignoriert (verhält sich wie ein leerer String)

  2. BLOBs werden ggf. in den Zeichensatz des ersten Arguments transliteriert und ihr Inhalt an das Ergebnis angehängt

  3. andere Datentypen werden (wie üblich) in Strings umgewandelt und an das Ergebnis angehängt

Die Funktion BLOB_APPEND gibt einen vorübergehend nicht geschlossenen BLOB mit dem Flag BLB_close_on_read zurück.Wenn das erste Argument ein solches temporäres, nicht geschlossenes BLOB ist (z. B. durch einen vorherigen Aufruf von BLOB_APPEND erstellt), wird es so verwendet, wie es ist, andernfalls wird ein neues BLOB erstellt.Daher führt eine Reihe von Operationen wie blob = BLOB_APPEND (blob, …​) zur Erstellung von höchstens einem BLOB (es sei denn, Sie versuchen, ein BLOB an sich selbst anzuhängen).Dieses Blob wird automatisch von der Engine geschlossen, wenn der Client es liest, es einer Tabelle zuweist oder es in anderen Ausdrücken verwendet, die das Lesen des Inhalts erfordern.

Warning
Wichtige Einschränkungen für BLOB_APPEND
  1. Das NULL-Verhalten von BLOB_APPEND unterscheidet sich von der normalen Verkettung (unter Verwendung von ||).Das Auftreten von NULL verhält sich so, als ob ein leerer String verwendet wurde.Mit anderen Worten,"NULL wird effektiv ignoriert.

    Bei der normalen Verkettung führt die Verkettung mit NULL zu NULL.

  2. Das Ergebnis ist immer ein BLOB SUB_TYPE TEXT.

    Dies wurde als Fehler identifiziert, der in Firebird 5.0 (und –- vielleicht –- Firebird 4.0.3) behoben wird, siehe Issue #7256.

Note

Der eines Blobs auf NULL mittels IS [NOT] NULL liest das Blob nicht ein. Deshalb wird ein temporäres Blob mit dem Flag BLB_close_on_read nach einem solchen Test nicht geschlossen.

Tip

Verwenden Sie die Funktionen LIST oder BLOB_APPEND, um Blobs zu verketten.Dadurch werden der Arbeitsspeicherverbrauch und die Datenträger-E/A reduziert und außerdem das Datenbankwachstum aufgrund der Erstellung vieler temporärer Blobs bei Verwendung des Verkettungsoperators verhindert.

BLOB_APPEND-Beispiele

execute block
returns (b blob sub_type text)
as
begin
  -- creates a new temporary not closed BLOB
  -- and writes the string from the 2nd argument into it
  b = blob_append(null, 'Hello ');
  -- adds two strings to the temporary BLOB without closing it
  b = blob_append(b, 'World', '!');
  -- comparing a BLOB with a string will close it, because the BLOB needs to be read
  if (b = 'Hello World!') then
  begin
  -- ...
  end
  -- creates a temporary closed BLOB by adding a string to it
  b = b || 'Close';
  suspend;
end

CHAR_LENGTH(), CHARACTER_LENGTH()

Verfügbar in

DSQL, PSQL

Ergebnistyp

INTEGER

Syntax
  CHAR_LENGTH (string)
| CHARACTER_LENGTH (string)
Table 1. CHAR[ACTER]_LENGTH-Funktionsparameter
Parameter Beschreibung

string

Ein Ausdruck eines String-Typs

Gibt die Länge des Eingabestrings in Zeichen an.

Note
  • Bei Argumenten vom Typ CHAR liefert diese Funktion die formale Stringlänge (d.h. die deklarierte Länge eines Feldes oder einer Variablen).Wenn Sie die “logische” Länge erhalten möchten, ohne die abschließenden Leerzeichen zu zählen, rechts-TRIM das Argument vor der Übergabe an CHAR[ACTER]_LENGTH.

  • BLOB-Unterstützung: Seit Firebird 2.1 unterstützt diese Funktion vollständig Text-BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

CHAR_LENGTH-Beispiele

select char_length('Hello!') from rdb$database
-- Ergebnis 6

select char_length(_iso8859_1 'Grüß di!') from rdb$database
-- Ergebnis 8

select char_length
  (cast (_iso8859_1 'Grüß di!' as varchar(24) character set utf8))
from rdb$database
-- Ergebnis 8; 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
-- Ergebnis 24: alle 24 CHAR-Positionen zählen

CRYPT_HASH()

Verfügbar in

DSQL, PSQL

Rückgabetyp

VARBINARY

Syntax
CRYPT_HASH (value USING <hash>)

<hash> ::= MD5 | SHA1 | SHA256 | SHA512
Table 1. CRYPT_HASH-Funktionsparameter
Parameter Beschreibung

value

Ausdruck von Werten jeglicher Art;Nicht-String- oder Nicht-Binär-Typen werden in Strings konvertiert

hash

Anzuwendender kryptografischer Hash-Algorithmus

CRYPT_HASH gibt einen kryptografischen Hash zurück, der aus dem Eingabeargument mit dem angegebenen Algorithmus berechnet wurde.Wenn das Eingabeargument kein String- oder Binärtyp ist, wird es vor dem Hashing in einen String konvertiert.

Diese Funktion gibt ein VARBINARY mit der Länge abhängig vom angegebenen Algorithmus zurück.

Note
  • Die Algorithmen 'MD5' und 'SHA1' werden aus Sicherheitsgründen nicht empfohlen, da bekannte Angriffe Hash-Kollisionen erzeugen.Diese beiden Algorithmen werden nur aus Gründen der Abwärtskompatibilität bereitgestellt.

  • Beim Hashing von String- oder Binärwerten ist es wichtig, die Auswirkungen von abschließenden Leerzeichen (Leerzeichen oder NULs) zu berücksichtigen.Der Wert 'ab' in einem CHAR(5) (3 nachgestellte Leerzeichen) hat einen anderen Hash als wenn er in einem VARCHAR(5) (keine nachgestellten Leerzeichen) oder CHAR(6) gespeichert ist ( 4 nachgestellte Leerzeichen).

    Um dies zu vermeiden, stellen Sie sicher, dass Sie immer einen Datentyp mit variabler Länge oder denselben Datentyp mit fester Länge verwenden oder Werte vor dem Hashing normalisieren, zum Beispiel mit TRIM(TRAILING FROM value) .

Beispiele für CRYPT_HASH

Hashing x mit dem SHA512-Algorithmus
select crypt_hash(x using sha512) from y;

HASH()

Verfügbar in

DSQL, PSQL

Ergebnistyp

INTEGER,BIGINT

Syntax
HASH (value [USING <hash>])

<hash> ::= CRC32
Table 1. HASH-Funktionsparameter
Parameter Beschreibung

value

Ausdruck von Werten jeglicher Art;Nicht-String- oder Nicht-Binär-Typen werden in Strings konvertiert

hash

Anzuwendender nicht-kryptografischer Hash-Algorithmus

HASH gibt einen Hash-Wert für das Eingabeargument zurück.Wenn das Eingabeargument kein String- oder Binärtyp ist, wird es vor dem Hashing in einen String konvertiert.

Die optionale USING-Klausel gibt den anzuwendenden nicht-kryptografischen Hash-Algorithmus an.Wenn die USING-Klausel fehlt, wird der Legacy-PJW-Algorithmus angewendet;dies ist identisch mit dem Verhalten in früheren Firebird-Versionen.

Diese Funktion unterstützt vollständig Text-BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

Unterstützte Algorithmen
not specified

Wenn kein Algorithmus angegeben ist, wendet Firebird die 64-Bit-Variante der nicht-kryptografischen PJW-Hash-Funktion (auch bekannt als ELF64) an.Dies ist ein sehr schneller Algorithmus für allgemeine Zwecke (Hash-Tabellen usw.), aber seine Kollisionsqualität ist nicht optimal.Andere Hashfunktionen – die explizit in der USING-Klausel angegeben sind, oder kryptografische Hashes durch [fblangref40-scalarfuncs-crypthash-de] – sollten für zuverlässigeres Hashing verwendet werden.

Die Funktion HASH gibt BIGINT für diesen Algorithmus zurück

CRC32

Mit CRC32 wendet Firebird den CRC32-Algorithmus unter Verwendung des Polynoms 0x04C11DB7 an.

Die Funktion HASH gibt INTEGER für diesen Algorithmus zurück.

Beispiele für HASH

  1. Hashing x mit dem CRC32-Algorithmus

    select hash(x using crc32) from y;
  2. Hashing x mit dem Legacy-PJW-Algorithmus

    select hash(x) from y;

Datums- und Zeitfunktionen

DATEADD()

Verfügbar in

DSQL, PSQL

Ergebnistyp

DATE, TIME oder TIMESTAMP

Syntax
DATEADD (<args>)

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

<amount> ::= ein ganzzahliger Ausdruck (negativ zum Subtrahieren)
<unit> ::=
    YEAR | MONTH | WEEK | DAY
  | HOUR | MINUTE | SECOND | MILLISECOND
<datetime> ::= ein DATE-, TIME- oder TIMESTAMP-Ausdruck
Table 1. DATEADD-Funktionsparameter
Parameter Beschreibung

amount

Ein ganzzahliger Ausdruck vom Typ SMALLINT, INTEGER oder BIGINT.Für die Einheit MILLISECOND ist der Typ NUMERIC(18, 1).Ein negativer Wert wird abgezogen.

unit

Datum/Uhrzeit-Einheit

datetime

Ein Ausdruck vom Typ DATE, TIME oder TIMESTAMP

Addiert die angegebene Anzahl von Jahren, Monaten, Wochen, Tagen, Stunden, Minuten, Sekunden oder Millisekunden zu einem Datums-/Uhrzeitwert.

  • Der Ergebnistyp wird durch das dritte Argument bestimmt.

  • Mit den Argumenten TIMESTAMP und DATE können alle Einheiten verwendet werden.

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

Beispiele of DATEADD

dateadd (28 day to current_date)
dateadd (-6 hour to current_time)
dateadd (month, 9, DateOfConception)
dateadd (-38 week to DateOfBirth)
dateadd (minute, 90, cast('now' as time))
dateadd (? year to date '11-Sep-1973')
select
  cast(dateadd(-1 * extract(millisecond from ts) millisecond to ts) as varchar(30)) as t,
  extract(millisecond from ts) as ms
from (
  select timestamp '2014-06-09 13:50:17.4971' as ts
  from rdb$database
) a
T                        MS
------------------------ ------
2014-06-09 13:50:17.0000  497.1

DATEDIFF()

Verfügbar in

DSQL, PSQL

Ergebnistyp

BIGINT, oder — seit Firebird 4.0.1 — NUMERIC(18,1) für MILLISECOND

Syntax
DATEDIFF (<args>)

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

<unit> ::=
    YEAR | MONTH | WEEK | DAY
  | HOUR | MINUTE | SECOND | MILLISECOND
<momentN> ::= ein DATE-, TIME- oder TIMESTAMP-Ausdruck
Table 1. DATEDIFF-Funktionsparameter
Parameter Beschreibung

unit

Datum/Uhrzeit-Einheit

moment1

Ein Ausdruck vom Typ DATE, TIME oder TIMESTAMP

moment2

Ein Ausdruck vom Typ DATE, TIME oder TIMESTAMP

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

  • Die Argumente DATE und TIMESTAMP können kombiniert werden.Andere Mischungen sind nicht erlaubt.

  • Mit den Argumenten TIMESTAMP und DATE können alle Einheiten verwendet werden.(Vor Firebird 2.5 waren Einheiten, die kleiner als DAY waren, für DATEs nicht zulässig.)

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

Berechnung
  • DATEDIFF betrachtet keine kleineren Einheiten als die im ersten Argument angegebene.Als Ergebnis,

    • datediff (Jahr, Datum '1-Jan-2009', Datum '31-Dez-2009') gibt 0 zurück, aber

    • `datediff (Jahr, Datum '31-Dez-2009', Datum '1-Jan-2010')' gibt 1 zurück

  • Es betrachtet jedoch alle größeren Einheiten. So:

    • `datediff (Tag, Datum '26-Jun-1908', Datum '11-Sep-1973')' gibt 23818 zurück

  • Ein negativer Ergebniswert bedeutet, dass moment2 vor moment1 liegt.

DATEDIFF-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))

EXTRACT()

Verfügbar in

DSQL, ESQL, PSQL

Ergebnistyp

SMALLINT or NUMERIC

Syntax
EXTRACT (<part> FROM <datetime>)

<part> ::=
    YEAR | MONTH | WEEK
  | DAY | WEEKDAY | YEARDAY
  | HOUR | MINUTE | SECOND | MILLISECOND
  | TIMEZONE_HOUR | TIMEZONE_MINUTE
<datetime> ::= ein DATE-, TIME- oder TIMESTAMP-Ausdruck
Table 1. EXTRACT-Funktionsparameter
Parameter Beschreibung

part

Datum/Uhrzeit-Einheit

datetime

Ein Ausdruck vom Typ DATE, TIME oder TIMESTAMP

Extrahiert ein Element aus einem DATE, TIME oder TIMESTAMP Ausdruck und gibt es zurück.

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 Datum/Uhrzeit-Argument vorhanden ist (z. B. SECOND aus einem DATE oder YEAR aus einer TIME), tritt ein Fehler auf.

Table 1. Arten und Bereiche von EXTRACT-Ergebnissen
Teil Typ Bereich Anmerkung

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

beinhaltet Millisekunden als Bruch

MILLISECOND

NUMERIC(9,1)

0.0-999.9

fehlerhaft in 2.1, 2.1.1

TIMEZONE_HOUR

SMALLINT

-23 - +23

 

TIMEZONE_MINUTE

SMALLINT

-59 - +59

 

MILLISECOND

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

Note

Wenn Sie die Millisekunde aus [fblangref40-contextvars-current-time-de] extrahieren, beachten Sie, dass diese Variable standardmäßig auf die Sekundengenauigkeit eingestellt ist, sodass das Ergebnis immer 0 ist.Extrahieren Sie aus CURRENT_TIME(3) oder [fblangref40-contextvars-current-timestamp-de], um eine Genauigkeit in Millisekunden zu erhalten.

WEEK

Firebird 2.1 und höher unterstützen die Extraktion der ISO-8601-Wochennummer aus einem "DATE" oder "TIMESTAMP".ISO-8601-Wochen beginnen an einem Montag und haben immer die vollen sieben Tage.Woche 1 ist die erste Woche mit einem Großteil (mindestens 4) der Tage im neuen Jahr.Die ersten 1-3 Tage des Jahres können zur letzten Woche (52 oder 53) des Vorjahres gehören.Ebenso können die letzten 1-3 Tage eines Jahres zur ersten Woche des Folgejahres gehören.

Caution

Seien Sie vorsichtig, wenn Sie die Ergebnisse von WOCHE und JAHR kombinieren.Zum Beispiel liegt der 30. Dezember 2008 in Woche 1 von 2009, also gibt extract(week from date '40 Dec 2008')' 1 zurück.Das Extrahieren von `YEAR ergibt jedoch immer das Kalenderjahr, das 2008 ist.In diesem Fall sind "WOCHE" und "JAHR" uneins.Das gleiche passiert, wenn die ersten Januartage zur letzten Woche des Vorjahres gehören.

Bitte beachten Sie auch, dass WEEKDAY nicht ISO-8601-kompatibel ist: Es gibt 0 für Sonntag zurück, während ISO-8601 7 angibt.

FIRST_DAY()

Verfügbar in

DSQL, PSQL

Rückgabetyp

DATE, TIMESTAMP (mit oder ohne Zeitzone)

Syntax
FIRST_DAY(OF <period> FROM date_or_timestamp)

<period> ::= YEAR | MONTH | WEEK
Table 1. FIRST_DAY-Funktionsparameter
Parameter Beschreibung

date_or_timestamp

Ausdruck vom Typ DATE, TIMESTAMP WITHOUT TIME ZONE oder TIMESTAMP WITH TIME ZONE

FIRST_DAY gibt ein Datum oder einen Zeitstempel (gleich dem Typ von date_or_timestamp) mit dem ersten Tag des Jahres, des Monats oder der Woche eines gegebenen Datums- oder Zeitstempelwerts zurück.

Note
  • Der erste Tag der Woche gilt als Sonntag, nach den gleichen Regeln wie für [fblangref40-scalarfuncs-extract-de] mit WEEKDAY.

  • Wenn ein Zeitstempel übergeben wird, behält der Rückgabewert den Zeitteil bei.

Beispiel für FIRST_DAY

select first_day(of month from current_date) from rdb$database;
select first_day(of year from current_timestamp) from rdb$database;
select first_day(of week from date '2017-11-01') from rdb$database;

LAST_DAY()

Verfügbar in

DSQL, PSQL

Rückgabetyp

DATE, TIMESTAMP (mit oder ohne Zeitzone)

Syntax
LAST_DAY(OF <period> FROM date_or_timestamp)

<period> ::= YEAR | MONTH | WEEK
Table 1. LAST_DAY-Funktionsparameter
Parameter Beschreibung

date_or_timestamp

Ausdruck vom Typ DATE, TIMESTAMP WITHOUT TIME ZONE oder TIMESTAMP WITH TIME ZONE

LAST_DAY gibt ein Datum oder einen Zeitstempel (gleich dem Typ von date_or_timestamp) mit dem letzten Tag des Jahres, des Monats oder der Woche eines gegebenen Datums- oder Zeitstempelwerts zurück.

Note
  • Der letzte Tag der Woche gilt als Samstag, nach den gleichen Regeln wie für [fblangref40-scalarfuncs-extract-de] mit WEEKDAY.

  • Wenn ein Zeitstempel übergeben wird, behält der Rückgabewert den Zeitteil bei.

Beispiele für LAST_DAY

select last_day(of month from current_date) from rdb$database;
select last_day(of year from current_timestamp) from rdb$database;
select last_day(of week from date '2017-11-01') from rdb$database;

Typ-Casting-Funktionen

CAST()

Verfügbar in

DSQL, ESQL, PSQL

Ergebnistyp

Wie von target_type angegeben

Syntax
CAST (<expression> AS <target_type>)

<target_type> ::= <domain_or_non_array_type> | <array_datatype>

<domain_or_non_array_type> ::=
  !! Siehe auch Syntax für skalare Datentypen !!

<array_datatype> ::=
  !! Siehe auch Syntax der Array-Datentypen !!
Table 1. CAST-Funktionsparameter
Parameter Beschreibung

expression

SQL-Ausdruck

sql_datatype

SQL-Datentyp

CAST wandelt einen Ausdruck in den gewünschten Datentyp oder die gewünschte Domäne um.Wenn die Konvertierung nicht möglich ist, wird ein Fehler ausgegeben.

Casting BLOBs

Erfolgreiches Casting zu und von BLOBs ist seit Firebird 2.1 möglich.

Syntax für “Kurzschreibweise”

Alternative Syntax, die nur unterstützt wird, wenn ein Stringliteral in ein DATE, TIME oder TIMESTAMP umgewandelt wird:

datatype 'date/timestring'

Diese Syntax war bereits in InterBase verfügbar, wurde jedoch nie richtig dokumentiert.Im SQL-Standard heißt diese Funktion “datetime literals”.

Note

Seit Firebird 4.0 ist die Verwendung von 'NOW', 'YESTERDAY' und 'TOMORROW' in der Kurzform nicht mehr erlaubt; nur Literale, die einen festen Zeitpunkt definieren, werden unterstützt.

Zulässige Typumwandlungen

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

Table 1. Mögliche Type-Castings mit CAST
Von Nach

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

Denken Sie daran, dass manchmal Informationen verloren gehen, zum Beispiel wenn Sie einen TIMESTAMP in ein DATE umwandeln.Auch die Tatsache, dass Typen CAST-kompatibel sind, ist noch keine Garantie dafür, dass eine Konvertierung erfolgreich ist.“CAST(123456789 as SMALLINT)” führt definitiv zu einem Fehler, ebenso wie “CAST('Judgement Day' as DATE)”.

Casting-Parameter

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

cast (? as integer)

Dies gibt Ihnen die Kontrolle über den Typ des Parameters, der von der Engine eingerichtet wird.Bitte beachten Sie, dass Sie bei Anweisungsparametern immer eine vollständige Syntaxumwandlung benötigen – Kurzformumwandlungen werden nicht unterstützt.

Casting in eine Domain oder deren Typ

Firebird 2.1 und höher unterstützen das Casting in eine Domäne oder deren Basistyp.Beim Casting in eine Domain müssen alle für die Domain deklarierten Constraints (NOT NULL und/oder CHECK) erfüllt sein, sonst schlägt das Casting fehl.Bitte beachten Sie, dass ein CHECK erfolgreich ist, wenn es als TRUE oder NULL ausgewertet wird!Also folgende Aussagen 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 Besetzungsnummer 1 führt zu einem Fehler.

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 oben definierten Domain 'quint' sind die folgenden beiden Casts äquivalent und werden beide 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-Typ verwendet wird, werden sein Zeichensatz und seine Kollatierung 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;
-- Ergebnis Deze -> Die -> deze -> die

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

Wenn die Definition einer Domain geändert wird, können bestehende CASTs für diese Domain oder ihr Typ ungültig werden.Wenn diese CASTs in PSQL-Modulen vorkommen, kann ihre Ungültigkeit erkannt werden.Siehe Hinweis Das RDB$VALID_BLR-Feld in Anhang A.

Umwandeln in den Typ einer Spalte

In Firebird 2.5 und höher ist es möglich, Ausdrücke in den Typ einer vorhandenen Tabelle oder Ansichtsspalte umzuwandeln.Nur der Typ selbst wird verwendet;bei String-Typen umfasst dies den Zeichensatz, aber nicht die Kollatierung.Einschränkungen 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;
Warning
Warnungen

Wenn die Definition einer Spalte geändert wird, können vorhandene CASTs für den Typ dieser Spalte ungültig werden.Wenn diese CASTs in PSQL-Modulen vorkommen, kann ihre Ungültigkeit erkannt werden.Siehe den Hinweis Das RDB$VALID_BLR-Feld in Anhang A.

Cast-Beispiele

Ein Vollsyntax Cast:

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

Eine Kurzschreibweise zur Umwandlung von String zu Datum:

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

Beachten Sie, dass Sie sogar die Kurzform aus dem obigen Beispiel weglassen können, da die Engine aus dem Kontext (Vergleich mit einem DATE-Feld) versteht, wie die Zeichenfolge zu interpretieren ist:

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

Jedoch ist dies nicht immer möglich.Der folgende Cast kann nicht weggelassen werden, sonst würde sich die Engine mit einer Ganzzahl wiederfinden, die von einer Zeichenfolge subtrahiert werden soll:

select cast('today' as date) - 7 from rdb$database

Bitweise Funktionen

BIN_AND()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

SMALLINT, INTEGER oder BIGINT

Note

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

Syntax
BIN_AND (number, number [, number ...])
Table 1. BIN_AND-Funktionsparameter
Parameter Beschreibung

number

Beliebige ganze Zahl (literal, smallint/integer/bigint, numerisch/dezimal mit Skalierung 0)

Gibt das Ergebnis der bitweisen AND-Operation für die Argumente zurück.

BIN_NOT()

Verfügbar in

DSQL, PSQL

Ergebnistyp

SMALLINT, INTEGER oder BIGINT

Note

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

Syntax
BIN_NOT (number)
Table 1. BIN_NOT-Funktionsparameter
Parameter Beschreibung

number

Beliebige ganze Zahl (literal, smallint/integer/bigint, numerisch/dezimal mit Skala 0)

Gibt das Ergebnis der bitweisen NOT-Operation für das Argument zurück, d.h. das Einser-Komplement.

BIN_OR()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

SMALLINT, INTEGER oder BIGINT

Note

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

Syntax
BIN_OR (number, number [, number ...])
Table 1. BIN_OR-Funktionsparameter
Parameter Beschreibung

number

Beliebige ganze Zahl (literal, smallint/integer/bigint, numerisch/dezimal mit Skalierung 0)

Gibt das Ergebnis der bitweisen OR-Operation für die Argumente zurück.

BIN_SHL()

Verfügbar in

DSQL, PSQL

Ergebnistyp

BIGINT

Syntax
BIN_SHL (number, shift)
Table 1. BIN_SHL-Funktionsparameter
Parameter Beschreibung

number

Eine Zahl eines ganzzahligen Typs

shift

Die Anzahl der Bits, um die der Zahlenwert verschoben wird

Gibt das erste Argument bitweise linksverschoben um das zweite Argument zurück, d. h. a << b oder a·2b.

BIN_SHR()

Verfügbar in

DSQL, PSQL

Ergebnistyp

BIGINT

Syntax
BIN_SHR (number, shift)
Table 1. BIN_SHR-Funktionsparameter
Parameter Beschreibung

number

Eine Zahl eines ganzzahligen Typs

shift

Die Anzahl der Bits, um die der Zahlenwert verschoben wird

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

  • Die ausgeführte Operation ist eine arithmetische Rechtsverschiebung (SAR), dh das Vorzeichen des ersten Operanden bleibt immer erhalten.

BIN_XOR()

Verfügbar in

DSQL, PSQL

Möglicher Namenskonflikt

YES → Details lesen

Ergebnistyp

SMALLINT, INTEGER oder BIGINT

Note

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

Syntax
BIN_XOR (number, number [, number ...])
Table 1. BIN_XOR-Funktionsparameter
Parameter Beschreibung

number

Beliebige ganze Zahl (literal, smallint/integer/bigint, numerisch/dezimal mit Skalierung 0)

Gibt das Ergebnis der bitweisen XOR-Operation für die Argumente zurück.

UUID-Funktionen

CHAR_TO_UUID()

Verfügbar in

DSQL, PSQL

Ergebnistyp

BINARY(16)

Syntax
CHAR_TO_UUID (ascii_uuid)
Table 1. 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 Hexadezimalziffern an beliebigen anderen Stellen, z.B. 'A0bF4E45-3029-2a44-D493-4998c9b439A3'

Konvertiert eine für Menschen lesbare 36-stellige UUID-Zeichenfolge in die entsprechende 16-Byte-UUID.

CHAR_TO_UUID-Beispiele

select char_to_uuid('A0bF4E45-3029-2a44-D493-4998c9b439A3') from rdb$database
-- Ergebnis A0BF4E4530292A44D4934998C9B439A3 (16-Byte String)

select char_to_uuid('A0bF4E45-3029-2A44-X493-4998c9b439A3') from rdb$database
-- Fehler: - Menschlich lesbares UUID-Argument für CHAR_TO_UUID
             muss eine Hex-Ziffer an Position 20 anstelle von "X (ASCII 88)" haben

GEN_UUID()

Verfügbar in

DSQL, PSQL

Ergebnistyp

BINARY(16)

Syntax
GEN_UUID ()

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

GEN_UUID-Beispiel

select gen_uuid() from rdb$database
-- Ergebnis e.g. 017347BFE212B2479C00FA4323B36320 (16-Byte String)

UUID_TO_CHAR()

Verfügbar in

DSQL, PSQL

Ergebnistyp

CHAR(36)

Syntax
UUID_TO_CHAR (uuid)
Table 1. UUID_TO_CHAR-Funktionsparameter
Parameter Beschreibung

uuid

16-Byte UUID

Konvertiert eine 16-Byte-UUID in ihre 36-stellige, für Menschen lesbare ASCII-Darstellung.

UUID_TO_CHAR-Beispiele

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

select uuid_to_char(gen_uuid()) from rdb$database
-- Ergebnis e.g. '680D946B-45FF-DB4E-B103-BB5711529B86'

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

Funktionen für Sequenzen (Generatoren)

GEN_ID()

Verfügbar in

DSQL, ESQL, PSQL

Rückgabetyp

BIGINT — Dialect 2 und 3
INTEGER — Dialect 1

Syntax
GEN_ID (generator-name, step)
Table 1. GEN_ID-Funktionsparameter
Parameter Beschreibung

generator-name

Name eines vorhandenen Generators (Sequenz).Wenn er in doppelten Anführungszeichen mit einem Bezeichner definiert wurde, bei dem die Groß-/Kleinschreibung beachtet wird, muss er in derselben Form verwendet werden, es sei denn, der Name wird ausschließlich in Großbuchstaben geschrieben.

step

Ein ganzzahliger Ausdruck

Erhöht einen Generator oder eine Sequenz und gibt den neuen Wert zurück.Wenn Schritt gleich 0 ist, lässt die Funktion den Wert des Generators unverändert und gibt seinen aktuellen Wert zurück.

  • Ab Firebird 2.0 wird die SQL-kompatible Syntax NEXT VALUE FOR bevorzugt, außer wenn eine andere Erhöhung als 1 benötigt wird.

Warning

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

Note

In Dialekt 1 ist der Ergebnistyp INTEGER, in Dialekt 2 und 3 ist er BIGINT.

GEN_ID-Beispiel

new.rec_id = gen_id(gen_recnum, 1);

Bedingte Funktionen

COALESCE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Abhängig von der Eingabe

Syntax
COALESCE (<exp1>, <exp2> [, <expN> ... ])
Table 1. COALESCE-Funktionsparameter
Parameter Beschreibung

exp1, exp2 …​ expN

Eine Liste von Ausdrücken aller kompatiblen Typen

Die Funktion COALESCE nimmt zwei oder mehr Argumente und gibt den Wert des ersten Nicht-NULL-Arguments zurück.Wenn alle Argumente NULL ergeben, ist das Ergebnis NULL.

COALESCE-Beispiele

Dieses Beispiel wählt den Nickname aus der Persons-Tabelle.Wenn es NULL ist, geht es weiter zu FirstName.Ist auch dieser NULL, wird “'Mr./Mrs.'” verwendet.Schließlich fügt es den Familiennamen hinzu.Insgesamt wird versucht, aus den verfügbaren Daten einen möglichst informellen vollständigen Namen zusammenzustellen.Beachten Sie, dass dieses Schema nur funktioniert, wenn fehlende Spitznamen und Vornamen wirklich NULL sind: Wenn einer von ihnen stattdessen ein leerer String ist, wird COALESCE diesen glücklich an den Aufrufer zurückgeben.

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

DECODE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Abhängig von der Eingabe

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

Das äquivalente CASE-Konstrukt:

CASE <testexpr>
  WHEN <expr1> THEN <result1>
  [WHEN <expr2> THEN <result2> …]
  [ELSE <defaultresult>]
END
Table 1. DECODE-Funktionsparameter
Parameter Beschreibung

testexpr

Ein Ausdruck eines beliebigen kompatiblen Typs, der mit den Ausdrücken expr1, expr2 …​ exprN . verglichen wird

expr1, expr2, …​ exprN

Ausdrücke beliebiger kompatibler Typen, mit denen der Ausdruck testexpr verglichen wird

result1, result2, …​ resultN

Rückgabewerte jeglichen Typs

defaultresult

Der Ausdruck, der zurückgegeben werden soll, wenn keine der Bedingungen erfüllt ist

DECODE ist eine Abkürzung für das sogenannte “Einfaches CASE”-Konstrukt, in dem ein gegebener Ausdruck mit einer Anzahl von andere Ausdrücke, bis eine Übereinstimmung gefunden wird.Das Ergebnis wird durch den Wert bestimmt, der nach dem übereinstimmenden Ausdruck aufgeführt ist.Wenn keine Übereinstimmung gefunden wird, wird das Standardergebnis zurückgegeben, falls vorhanden.Andernfalls wird NULL zurückgegeben.

Caution

Der Abgleich erfolgt mit dem Operator ‘=’. Wenn also testexpr NULL ist, wird es mit keinem der exprs übereinstimmen, nicht einmal mit denen, die NULL sind.

DECODE-Beispiele

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

CASE, Einfaches CASE

IIF()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Abhängig von der Eingabe

Syntax
IIF (<condition>, ResultT, ResultF)
Table 1. IIF-Funktionsparameter
Parameter Beschreibung

condition

Ein wahrer|falscher Ausdruck

resultT

Der zurückgegebene Wert, wenn die Bedingung wahr ist

resultF

Der zurückgegebene Wert, wenn die Bedingung falsch ist

IIF benötigt drei Argumente.Wenn das erste Argument true ergibt, wird das zweite Argument zurückgegeben;andernfalls wird die dritte zurückgegeben.

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

Note

IIF(<Cond>, Result1, Result2) ist eine Abkürzung für “CASE WHEN <Cond> THEN Result1 ELSE Result2 END”.

IIF-Beispiele

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

MAXVALUE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Variiert je nach Eingabe — das Ergebnis hat denselben Datentyp wie der erste Ausdruck in der Liste (expr1).

Syntax
MAXVALUE (<expr1> [, ... , <exprN> ])
Table 1. MAXVALUE-Funktionsparameter
Parameter Beschreibung

expr1 …​ exprN

Liste der Ausdrücke kompatibler Typen

Gibt den Höchstwert aus einer Liste von numerischen, Zeichenfolgen- oder Datums-/Uhrzeitausdrücken zurück.Diese Funktion unterstützt vollständig Text-BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

Wenn ein oder mehrere Ausdrücke in NULL aufgelöst werden, gibt MAXVALUE NULL zurück.Dieses Verhalten unterscheidet sich von der Aggregatfunktion MAX.

MAXVALUE-Beispiele

SELECT MAXVALUE(PRICE_1, PRICE_2) AS PRICE
  FROM PRICELIST

MINVALUE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Variiert je nach Eingabe — das Ergebnis hat denselben Datentyp wie der erste Ausdruck in der Liste (expr1).

Syntax
MINVALUE (<expr1> [, ... , <exprN> ])
Table 1. MINVALUE-Funktionsparameter
Parameter Beschreibung

expr1 …​ exprN

Liste der Ausdrücke kompatibler Typen

Gibt den Mindestwert aus einer Liste von numerischen, Zeichenfolgen- oder Datums-/Uhrzeitausdrücken zurück.Diese Funktion unterstützt vollständig Text-BLOBs jeder Länge und jedes beliebigen Zeichensatzes.

Wenn ein oder mehrere Ausdrücke in NULL aufgelöst werden, gibt MINVALUE NULL zurück.Dieses Verhalten unterscheidet sich von der Aggregatfunktion MIN.

MINVALUE-Beispiele

SELECT MINVALUE(PRICE_1, PRICE_2) AS PRICE
  FROM PRICELIST

NULLIF()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Abhängig von der Eingabe

Syntax
NULLIF (<exp1>, <exp2>)
Table 1. NULLIF-Funktionsparameter
Parameter Beschreibung

exp1

Ein Ausdruck

exp2

Ein anderer Ausdruck eines Datentyps, der mit exp1 kompatibel ist

NULLIF gibt den Wert des ersten Arguments zurück, es sei denn, es ist gleich dem zweiten.In diesem Fall wird NULL zurückgegeben.

NULLIF-Beispiel

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

Dadurch wird das durchschnittliche Gewicht der in FatPeople aufgelisteten Personen zurückgegeben, mit Ausnahme derer mit einem Gewicht von -1, da "AVG" "NULL"-Daten überspringt.Vermutlich bedeutet -1 in dieser Tabelle “Gewicht unbekannt”.Ein einfaches AVG(Weight) würde die -1 Gewichte enthalten, wodurch das Ergebnis verzerrt wird.