Beispiel für BASE64_ENCODE
select base64_encode('Test base64')
from rdb$database;
BASE64_ENCODE
================
VGVzdCBiYXNlNjQ=
Funktionen für Sequenzen (Generatoren)
BASE64_ENCODE
select base64_encode('Test base64')
from rdb$database;
BASE64_ENCODE
================
VGVzdCBiYXNlNjQ=
BIT_LENGTH()
DSQL, PSQL
INTEGER
BIT_LENGTH (string)
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 |
BLOB
-UnterstützungSeit Firebird 2.1 unterstützt diese Funktion vollständig Text-BLOB
s jeder Länge und jedes beliebigen Zeichensatzes.
BIT_LENGTH
-Beispieleselect 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()
DSQL, PSQL
4.0.2
BLOB
BLOB_APPEND(expr1, expr2 [, exprN ... ])
Parameter | Beschreibung |
---|---|
exprN |
Ein Ausdruck eines Typs, der in |
Die BLOB_APPEND
-Funktion verkettet Blobs, ohne zwischenzeitliche BLOB
s 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:
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.
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.
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
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:
NULL
s werden ignoriert (verhält sich wie ein leerer String)
BLOB
s werden ggf. in den Zeichensatz des ersten Arguments transliteriert und ihr Inhalt an das Ergebnis angehängt
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
|
Note
|
Der eines Blobs auf |
Tip
|
Verwenden Sie die Funktionen |
BLOB_APPEND
-Beispieleexecute 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()
DSQL, PSQL
INTEGER
CHAR_LENGTH (string) | CHARACTER_LENGTH (string)
Parameter | Beschreibung |
---|---|
string |
Ein Ausdruck eines String-Typs |
Gibt die Länge des Eingabestrings in Zeichen an.
Note
|
|
CHAR_LENGTH
-Beispieleselect 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()
DSQL, PSQL
VARBINARY
CRYPT_HASH (value USING <hash>) <hash> ::= MD5 | SHA1 | SHA256 | SHA512
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
|
|
CRYPT_HASH
x
mit dem SHA512-Algorithmusselect crypt_hash(x using sha512) from y;
HASH()
DSQL, PSQL
INTEGER
,BIGINT
HASH (value [USING <hash>]) <hash> ::= CRC32
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-BLOB
s jeder Länge und jedes beliebigen Zeichensatzes.
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.
HASH
Hashing x
mit dem CRC32-Algorithmus
select hash(x using crc32) from y;
Hashing x
mit dem Legacy-PJW-Algorithmus
select hash(x) from y;
DATEADD()
DSQL, PSQL
DATE
, TIME
oder TIMESTAMP
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
Parameter | Beschreibung |
---|---|
amount |
Ein ganzzahliger Ausdruck vom Typ |
unit |
Datum/Uhrzeit-Einheit |
datetime |
Ein Ausdruck vom Typ |
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.
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()
DSQL, PSQL
BIGINT
, oder — seit Firebird 4.0.1 — NUMERIC(18,1)
für MILLISECOND
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
Parameter | Beschreibung |
---|---|
unit |
Datum/Uhrzeit-Einheit |
moment1 |
Ein Ausdruck vom Typ |
moment2 |
Ein Ausdruck vom Typ |
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 DATE
s nicht zulässig.)
Bei TIME
-Argumenten können nur HOUR
, MINUTE
, SECOND
und MILLISECOND
verwendet werden.
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
-Beispieledatediff (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()
DSQL, ESQL, PSQL
SMALLINT
or NUMERIC
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
Parameter | Beschreibung |
---|---|
part |
Datum/Uhrzeit-Einheit |
datetime |
Ein Ausdruck vom Typ |
Extrahiert ein Element aus einem DATE
, TIME
oder TIMESTAMP
Ausdruck und gibt es zurück.
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.
Teil | Typ | Bereich | Anmerkung |
---|---|---|---|
|
|
1-9999 |
|
|
|
1-12 |
|
|
|
1-53 |
|
|
|
1-31 |
|
|
|
0-6 |
0 = Sonntag |
|
|
0-365 |
0 = 1. Januar |
|
|
0-23 |
|
|
|
0-59 |
|
|
|
0.0000-59.9999 |
beinhaltet Millisekunden als Bruch |
|
|
0.0-999.9 |
fehlerhaft in 2.1, 2.1.1 |
|
|
-23 - +23 |
|
|
|
-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 |
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 Bitte beachten Sie auch, dass |
FIRST_DAY()
DSQL, PSQL
DATE
, TIMESTAMP
(mit oder ohne Zeitzone)
FIRST_DAY(OF <period> FROM date_or_timestamp) <period> ::= YEAR | MONTH | WEEK
Parameter | Beschreibung |
---|---|
date_or_timestamp |
Ausdruck vom Typ |
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
|
|
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()
DSQL, PSQL
DATE
, TIMESTAMP
(mit oder ohne Zeitzone)
LAST_DAY(OF <period> FROM date_or_timestamp) <period> ::= YEAR | MONTH | WEEK
Parameter | Beschreibung |
---|---|
date_or_timestamp |
Ausdruck vom Typ |
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
|
|
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;
CAST()
DSQL, ESQL, PSQL
Wie von target_type angegeben
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 !!
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.
BLOB
sErfolgreiches Casting zu und von BLOB
s ist seit Firebird 2.1 möglich.
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 |
Die folgende Tabelle zeigt die mit CAST
möglichen Typkonvertierungen.
Von | Nach |
---|---|
Numerische Typen |
Numerische Typen |
|
|
|
|
|
|
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)
”.
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.
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 |
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 |
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
BIN_AND()
DSQL, PSQL
YES → Details lesen
SMALLINT
, INTEGER
oder BIGINT
Note
|
Das Ergebnis |
BIN_AND (number, number [, number ...])
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()
DSQL, PSQL
SMALLINT
, INTEGER
oder BIGINT
Note
|
Das Ergebnis |
BIN_NOT (number)
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.
[fblangref40-scalarfuncs-bin-or-de], [fblangref40-scalarfuncs-bin-xor-de] und weitere.
BIN_OR()
DSQL, PSQL
YES → Details lesen
SMALLINT
, INTEGER
oder BIGINT
Note
|
Das Ergebnis |
BIN_OR (number, number [, number ...])
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()
DSQL, PSQL
BIGINT
BIN_SHL (number, shift)
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()
DSQL, PSQL
BIGINT
BIN_SHR (number, shift)
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()
DSQL, PSQL
YES → Details lesen
SMALLINT
, INTEGER
oder BIGINT
Note
|
Das Ergebnis |
BIN_XOR (number, number [, number ...])
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.
CHAR_TO_UUID()
DSQL, PSQL
BINARY(16)
CHAR_TO_UUID (ascii_uuid)
Parameter | Beschreibung |
---|---|
ascii_uuid |
Eine 36-stellige Darstellung der UUID.‘ |
Konvertiert eine für Menschen lesbare 36-stellige UUID-Zeichenfolge in die entsprechende 16-Byte-UUID.
CHAR_TO_UUID
-Beispieleselect 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()
DSQL, PSQL
BINARY(16)
GEN_UUID ()
Gibt eine universell eindeutige ID als 16-Byte-Zeichenfolge zurück.
GEN_UUID
-Beispielselect gen_uuid() from rdb$database
-- Ergebnis e.g. 017347BFE212B2479C00FA4323B36320 (16-Byte String)
UUID_TO_CHAR()
DSQL, PSQL
CHAR(36)
UUID_TO_CHAR (uuid)
Parameter | Beschreibung |
---|---|
uuid |
16-Byte UUID |
Konvertiert eine 16-Byte-UUID in ihre 36-stellige, für Menschen lesbare ASCII-Darstellung.
UUID_TO_CHAR
-Beispieleselect 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'
GEN_ID()
DSQL, ESQL, PSQL
BIGINT
— Dialect 2 und 3INTEGER
— Dialect 1
GEN_ID (generator-name, step)
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 |
GEN_ID
-Beispielnew.rec_id = gen_id(gen_recnum, 1);
COALESCE()
DSQL, PSQL
Abhängig von der Eingabe
COALESCE (<exp1>, <exp2> [, <expN> ... ])
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
-BeispieleDieses 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()
DSQL, PSQL
Abhängig von der Eingabe
DECODE(<testexpr>, <expr1>, <result1> [<expr2>, <result2> …] [, <defaultresult>])
Das äquivalente CASE
-Konstrukt:
CASE <testexpr> WHEN <expr1> THEN <result1> [WHEN <expr2> THEN <result2> …] [ELSE <defaultresult>] END
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 ‘ |
DECODE
-Beispieleselect name,
age,
decode(upper(sex),
'M', 'Male',
'F', 'Female',
'Unknown'),
religion
from people
IIF()
DSQL, PSQL
Abhängig von der Eingabe
IIF (<condition>, ResultT, ResultF)
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
-Beispieleselect iif( sex = 'M', 'Sir', 'Madam' ) from Customers
MAXVALUE()
DSQL, PSQL
Variiert je nach Eingabe — das Ergebnis hat denselben Datentyp wie der erste Ausdruck in der Liste (expr1).
MAXVALUE (<expr1> [, ... , <exprN> ])
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-BLOB
s 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
-BeispieleSELECT MAXVALUE(PRICE_1, PRICE_2) AS PRICE
FROM PRICELIST
MINVALUE()
DSQL, PSQL
Variiert je nach Eingabe — das Ergebnis hat denselben Datentyp wie der erste Ausdruck in der Liste (expr1).
MINVALUE (<expr1> [, ... , <exprN> ])
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-BLOB
s 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
-BeispieleSELECT MINVALUE(PRICE_1, PRICE_2) AS PRICE
FROM PRICELIST
NULLIF()
DSQL, PSQL
Abhängig von der Eingabe
NULLIF (<exp1>, <exp2>)
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
-Beispielselect 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.