Exemple UNICODE_VAL
UNICODE_VAL
select unicode_val(x) from y;
Fonctions pour traiter les variables contextuelles
Fonctions pour travailler avec des chaînes de caractères
Fonctions pour travailler avec la date et l'heure
Fonctions permettant de travailler avec le type BLOB
Fonctions permettant de travailler avec le type DECFLOAT
Fonctions de conversion de type
Fonctions d'opérations binaires
Fonctions pour traiter les UUID
UNICODE_VAL
UNICODE_VAL
select unicode_val(x) from y;
UPPER()
DSQL, PSQL
UPPER (str)
Paramètre | Description |
---|---|
str |
Une expression de type chaîne de caractères. |
[VAR]CHAR
ou BLOB
La fonction UPPER
renvoie la chaîne de caractères d’entrée en majuscules. Le résultat exact dépend du jeu de caractères de la chaîne d’entrée. Par exemple, pour les jeux de caractères NONE et ASCII, seuls les caractères ASCII sont mis en majuscules ; pour les jeux de caractères OCTETS — la chaîne d’entrée entière est renvoyée inchangée.
UPPER
UPPER
select upper(_iso8859_1 'Débâcle')
from rdb$database
-- retourne 'DÉBÂCLE'
select upper(_iso8859_1 'Débâcle' collate fr_fr)
from rdb$database
-- retourne 'DEBACLE', Règles de mise en majuscules en français
-- résultat valide quand la BD est par défaut en UTF8 et le client configuré en iso8859_1
BASE64_DECODE()
DSQL, PSQL
BASE64_DECODE (base64_data)
Paramètre | Description |
---|---|
base64_data |
Données codées en base64 augmentées de |
`BLOB' ou `VARBINARY'.
BASE64_DECODE
décode une chaîne avec des données codées par l’algorithme base64et retourne la valeur décodée sous forme de VARBINARY
ou de BLOB
selon l’argument d’entrée.
Si la longueur du type base64_data n’est pas un multiple de 4, une erreur se produit pendant la préparation.Si la longueur de base64_data n’est pas un multiple de 4, une erreur se produit au moment de l’exécution.
Lorsque l’argument d’entrée n’est pas BLOB
, la longueur du type résultant est calculée comme suittype_length * 3/4
, où type_length est la longueur maximale en octets du type de l’argument d’entrée.
BASE64_DECODE
BASE64_DECODE
select cast(base64_decode('VGVzdCBiYXNlNjQ=') as varchar(12))
from rdb$database;
CAST ============ Test base64
BASE64_ENCODE()
DSQL, PSQL
BASE64_ENCODE (binary_data)
Paramètre | Description |
---|---|
binary_data |
Données binaires pour le codage |
VARCHAR CHARACTER SET ASCII
ou BLOB SUB_TYPE TEXT CHARACTER SET ASCII
.
La fonction BASE64_ENCODE
encode les données_binaires en utilisant l’algorithme base64 etrenvoie la valeur encodée sous la forme VARCHAR CHARACTER SET ASCII
ou BLOB SUB_TYPE TEXT CHARACTER SET ASCII
.selon le type de l’argument d’entrée.La valeur de retour est complétée par “`=`” afin que sa longueur soit un multiple de 4.
Lorsque l’argument d’entrée n’est pas BLOB
, la longueur du type résultant est calculée comme type_length * 4 / 3
, arrondie à un multiple de quatre, où type_length est la longueur maximale du type d’entrée en octets.
BASE64_ENCODE
BASE64_ENCODE
select base64_encode('Test base64')
from rdb$database;
BASE64_ENCODE ================ VGVzdCBiYXNlNjQ=
BIT_LENGTH()
DSQL, PSQL
BIT_LENGTH (string)
Paramètre | Description |
---|---|
string |
Une expression de type chaîne de caractères. |
BIGINT
La fonction BIT_LENGTH
renvoie la longueur de la chaîne d’entrée en bits.Pour les jeux de caractères multi-octets, le résultat peut être 8 fois le nombre de caractères dans le nombre formel
d’octets par caractère écrit dans RDB$CHARACTER_SETS
.
Avec les paramètres de type CHAR, cette fonction prend en compte la longueur totale de la chaîne formelle (par exemple, la longueur déclarée d’un champ ou d’une variable). Si vous voulez obtenir la longueur `logique' en bits, sans compter les espaces, vous devez effectuer une opération RIGHT TRIM sur l’argument avant de le passer à `BIT_LENGTH'.
BIT_LENGTH
BIT_LENGTH
SELECT BIT_LENGTH ('Hello!') FROM RDB$DATABASE
-- renvoie 48
SELECT BIT_LENGTH (_ISO8859_1 'Grüß Di!')
FROM RDB$DATABASE
-- retourne 64 : chacun, ü et ß occupent un octet en ISO8859_1
SELECT BIT_LENGTH (
CAST (_ISO8859_1 'Grüß di!' AS VARCHAR (24)
CHARACTER SET UTF8))
FROM RDB$DATABASE
-- renvoie 80 : ü et ß occupent chacun deux octets en UTF8.
SELECT BIT_LENGTH (
CAST (_ISO8859_1 'Grüß di!' AS CHAR (24)
CHARACTER SET UTF8))
FROM RDB$DATABASE
-- renvoie 208 : la taille de l'ensemble des 24 positions CHAR et deux d'entre elles sont de 16 bits
CHAR_LENGTH()
, CHARACTER_LENGTH()
DSQL, PSQL
CHAR_LENGTH (string) | CHARACTER_LENGTH (string)
Paramètre | Description |
---|---|
string |
Une expression de type chaîne de caractères. |
BIGINT
La fonction CHAR_LENGTH
renvoie la longueur (en caractères) de la chaîne passée en argument.
Note
|
Avec des paramètres de type |
HASH()
DSQL, PSQL
HASH (str [USING <algorithm>]) <algorithm> ::= { CRC32 }
Paramètre | Description |
---|---|
str |
Une expression de type chaîne de caractères. |
BIGINT
La fonction HASH
renvoie un hachage non cryptographique de la chaîne d’entrée.Cette fonction prend entièrement en charge les `BLOB' de texte de n’importe quelle longueur et avec n’importe quel jeu de caractères.
La clause facultative USING
spécifie l’algorithme de hachage non cryptographique à appliquer.Lorsque la clause USING
n’est pas présente, l’algorithme PJW est appliqué, comme dans les versions précédentes de Firebird.
Si aucun algorithme n’est spécifié, une version 64 bits de l’algorithme non cryptographique est utilisée.https://en.wikipedia.org/wiki/PJW_hash_function [fonction de hachage PJW^] (également connue sous le nom de ELF64) est utilisée.Cette fonction est très rapide et peut être utilisée à des fins générales (tables de hachage, etc.) mais présente un grand nombre de collisions.Pour un hachage plus sûr, vous devriez utiliser d’autres fonctions de hachage, explicitement spécifiées dans la clause USING, ou des hachages cryptographiques avec [fblangref-scalarfuncs-crypthash].
Pour cet algorithme de hachage, la fonction renvoie le type BIGINT
.
CRC32
Si la clause USING
spécifie l’algorithme CRC32
, Firebird applique l’algorithme CRC32 en utilisant le polynôme 0x04C11DB7.
Pour cet algorithme, la fonction HASH
renvoie un résultat de type INTEGER
.
HASH
SELECT HASH(x) FROM MyTable;
-- résultat du type BIGINT
SELECT HASH(x USING CRC32) FROM MyTable;
-- résultat du type INTEGER
Voir aussi :[fblangref-scalarfuncs-crypthash]
HEX_DECODE()
DSQL, PSQL
HEX_DECODE (hex_data)
Paramètre | Description |
---|---|
hex_data |
Données en représentation hexadécimale. |
VARBINARY
ou BLOB
.
La fonction HEX_DECODE
décode une chaîne de caractères avec des données hexadécimales et retourne la valeur décodée.comme VARBINARY
ou BLOB
selon le type d’entrée et la taille de l’argument.Si la longueur du type hex_data n’est pas un multiple de 2, une erreur se produit pendant la préparation.Si la longueur de hex_data n’est pas un multiple de 2, une erreur se produit au moment de l’exécution.
Lorsque l’argument d’entrée n’est pas BLOB
, la longueur du type résultant est calculée comme type_length / 2
,où type_longueur est la longueur maximale en octets du type de l’argument d’entrée.
HEX_DECODE
HEX_DECODE
select cast(hex_decode('48657861646563696D616C') as varchar(12))
from rdb$database;
CAST ============ Hexadecimal
HEX_ENCODE()
DSQL, PSQL
HEX_ENCODE (binary_data)
Paramètre | Description |
---|---|
binary_data |
Données binaires pour le codage |
VARCHAR CHARACTER SET ASCII
ou BLOB SUB_TYPE TEXT CHARACTER SET ASCII
La fonction HEX_ENCODE
encode les données binaires avec un nombre hexadécimal et retourne la valeur encodée sous forme de VARCHAR CHARACTER SET ASCII
ou de BLOB SUB_TYPE TEXT CHARACTER SET ASCII
selon l’argument d’entrée.
Lorsque l’argument d’entrée n’est pas BLOB
, la longueur du type résultant est calculée comme type_length * 2
, où type_length est la longueur maximale en octets du type de l’argument d’entrée.
HEX_ENCODE
HEX_ENCODE
select hex_encode('Hexadecimal')
from rdb$database;
HEX_ENCODE ====================== 48657861646563696D616C
DATEADD()
DSQL, PSQL
DATEADD (<args>) <args> ::= <amount> <unit> TO <datetime> | <unit>, <amount>, <datetime> <unit> ::= YEAR | MONTH | WEEK | DAY | WEEKDAY | YEARDAY | HOUR | MINUTE | SECOND | MILLISECOND
Paramètre | Description |
---|---|
amount |
Une expression de type |
unit |
Composante date/heure. |
datetime |
Une expression de type |
DATE
, TIME
ou TIMESTAMP
.
La fonction DATEADD
vous permet d’ajouter un nombre donné d’années, de mois, de semaines, d’heures, de minutes, de secondes, de millisecondes à une valeur de date/heure donnée.
Note
|
|
DATEADD
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
DATEDIFF (<args>) <args> ::= <unit> FROM <moment_1> TO <moment_2> | <unit>, <moment_1>, <moment_2> <unit> ::= YEAR | MONTH | WEEK | DAY | WEEKDAY | YEARDAY | HOUR | MINUTE | SECOND | MILLISECOND
Paramètre | Description |
---|---|
unit |
Composante date/heure. |
monent_1 |
Une expression de type |
monent_2 |
Une expression de type |
BIGINT
La fonction DATEDIFF
renvoie le nombre d’années, de mois, de semaines, de jours, d’heures, de minutes, de secondes ou de millisecondes entre deux valeurs de date/heure.
Caractéristiques d’utilisation :
Les paramètres DATE
et TIMESTAMP
peuvent être utilisés ensemble. La co-utilisation du type TIME
avec le type DATE
et TIMESTAMP
n’est pas autorisée ;
Avec un argument de type TIMESTAMP
et DATE
, n’importe quel composant date/heure <unit> peut être utilisé ;
Seuls HOUR
, MINUTE
, SECOND
et MILLISECOND
peuvent être utilisés pour le type de données TIME.
Note
|
|
DATEDIFF
DATEDIFF
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()
DSQL, PSQL
EXTRACT (<part> FROM <datetime>) <part> ::= YEAR | MONTH | WEEK | DAY | WEEKDAY | YEARDAY | HOUR | MINUTE | SECOND | MILLISECOND | TIMEZONE_HOUR | TIMEZONE_MINUTE
Paramètre | Description |
---|---|
part |
Composante date/heure. |
datetime |
Une expression de type |
SMALLINT
ou NUNERIC
.
La fonction EXTRACT
extrait les composants de date et d’heure des types de données DATE
, TIME
et TIMESTAMP
.
Composant date/heure | Type | Plage | Commentaire |
---|---|---|---|
|
|
1–9999 |
L’année |
|
|
1-4 |
Trimestre |
|
|
1–12 |
Mois |
|
|
1–53 |
Numéro de la semaine de l’année |
|
|
1–31 |
Jour |
|
|
0–6 |
Jour de la semaine. 0 — Dimanche |
|
|
0–365 |
Le numéro du jour de l’année. 0 = 1 janvier |
|
|
0–23 |
Heure |
|
|
0–59 |
Minute |
|
|
0.0000–59.9999 |
Secondes. Inclut les millisecondes |
|
|
0.0–999.9 |
Millisecondes |
|
|
de -14 à +14 |
Décalage des heures du fuseau horaire |
|
|
de -59 à +59 |
Décalage des minutes du fuseau horaire |
Note
|
Si le composant date/heure n’est pas présent dans l’argument date/heure, par exemple SECOND dans un argument de type DATE ou YEAR dans TIME, la fonction provoquera une erreur. |
À partir d’un argument de type DATE
ou TIMESTAMP
, vous pouvez extraire le numéro de la semaine. Selon la norme ISO-8601, la semaine commence le lundi et comprend toujours 7 jours. La première semaine de l’année est celle qui compte le plus de jours dans la nouvelle année (au moins 4) : les jours 1-3 peuvent appartenir à la semaine précédente (52 ou 53) de l’année précédente. Par analogie, les jours 1-3 de l’année en cours peuvent appartenir à la semaine 1 de l’année suivante.
EXTRACT
/* récupérer le numéro du trimestre par la date */
SELECT (EXTRACT(MONTH FROM CURRENT_TIMESTAMP)-1)/3+1
FROM RDB$DATABASE
FIRST_DAY()
DSQL, PSQL
FIRST_DAY(OF <period> FROM date_or_timestamp) <period> ::= YEAR | QUARTER | MONTH | WEEK
Paramètre | Description |
---|---|
date_or_timestamp |
Une expression de type |
DATE
ou TIMESTAMP [WITH | WITHOUT] TIME ZONE
.
Renvoie le premier jour de l’année, du mois ou de la semaine pour une date donnée.
Note
|
|
FIRST_DAY
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 '2022-11-01') FROM rdb$database;
LAST_DAY()
DSQL, PSQL
LAST_DAY(OF <period> FROM date_or_timestamp) <period> ::= YEAR | QUARTER | MONTH | WEEK
Paramètre | Description |
---|---|
date_or_timestamp |
Une expression de type |
DATE
ou TIMESTAMP [WITH | WITHOUT] TIME ZONE
.
Renvoie le dernier jour de l’année, du mois ou de la semaine pour une date donnée.
Note
|
|
LAST_DAY
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;
BLOB_APPEND()
DSQL, PSQL
BLOB_APPEND(<blob> [, <value1>, ... <valueN>]
Paramètre | Description |
---|---|
blob |
BLOB ou NULL. |
value |
La valeur de n’importe quel type. |
BLOB temporaire non fermée avec l’indicateur BLB_close_on_read
.
La fonction BLOB_APPEND
est conçue pour concaténer des BLOBs sans créer deBLOBs intermédiaires. Une opération de concaténation normale avec des arguments de type BLOB créera toujours autant de BLOB temporaires,autant de fois qu’il est utilisé.
Arguments d’entrée :
Le comportement suivant de la fonction est défini pour le premier argument en fonction de sa valeur :
NULL : un nouveau BLOB vide et non fermé sera créé
BLOB permanent (de la table) ou BLOB temporaire déjà fermé :un nouveau BLOB vide et non fermé sera créé et le contenu de l’espace de stockage du premier BLOB y sera ajouté.
BLOB temporaire non fermé : il sera utilisé ultérieurement
les autres types de données sont convertis en chaîne, un BLOB temporaire non fermé sera créé avec le contenu de cette chaîne.
Le reste des arguments peut être de n’importe quel type. Le comportement suivant est défini pour eux :
NULL est ignoré
les non-BLOB sont convertis en chaînes de caractères (selon les règles normales) et ajoutés au contenu du résultat.résultats
Les BLOB, si nécessaire, sont translittérés dans le jeu de caractères du premier argument et leur contenuleur contenu est ajouté au résultat
Comme valeur de sortie, la fonction BLOB_APPEND
renvoie un BLOB temporaire non fermé avec l’indicateur BLOB_close_on_read
.Il s’agit soit d’un nouveau BLOB, soit du même que dans le premier argument. Ainsi, une série d’opérations commeblob = BLOB_APPEND(blob, …)
créera au maximum un BLOB (sauf si vous essayez d’ajouter un BLOB à lui-même).Cette BLOB sera automatiquement fermée par le moteur lorsqu’une tentative est faite pour la lire par le client, l’écrire dans une table ou l’utiliser dans d’autres expressions qui nécessitent la lecture de son contenu.
Note
|
La vérification d’un BLOB pour NULL en utilisant l’opérateur |
execute block
returns (b blob sub_type text)
as
begin
-- créera un nouveau BLOB temporaire non fermé.
-- et y écrira la chaîne de caractères du 2ème argument
b = blob_append(null, 'Hello ');
-- ajoute deux lignes au BLOB temporaire sans la fermer
b = blob_append(b, 'World', '!');
-- la comparaison d'une BLOB à une chaîne de caractères la fermera, car elle doit lire le contenu du BLOB
if (b = 'Hello World!') then
begin
-- ...
end
-- va créer un BLOB fermé temporaire en y ajoutant une ligne
b = b || 'Close';
suspend;
end
Tip
|
Utilisez les fonctions |
BLOB_APPEND
Supposons que vous ayez besoin de construire du JSON du côté du serveur. Nous avons un paquet PSQL JSON_UTILS avec un ensemble de fonctions pour convertir les types de données élémentaires en notation JSON. Ensuite, la construction du JSON en utilisant la fonction BLOB_APPEND
ressemblera à ceci
EXECUTE BLOCK
RETURNS (
JSON_STR BLOB SUB_TYPE TEXT CHARACTER SET UTF8)
AS
DECLARE JSON_M BLOB SUB_TYPE TEXT CHARACTER SET UTF8;
BEGIN
FOR
SELECT
HORSE.CODE_HORSE,
HORSE.NAME,
HORSE.BIRTHDAY
FROM HORSE
WHERE HORSE.CODE_DEPARTURE = 15
FETCH FIRST 1000 ROW ONLY
AS CURSOR C
DO
BEGIN
SELECT
LIST(
'{' ||
JSON_UTILS.NUMERIC_PAIR('age', MEASURE.AGE) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('height', MEASURE.HEIGHT_HORSE) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('length', MEASURE.LENGTH_HORSE) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('chestaround', MEASURE.CHESTAROUND) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('wristaround', MEASURE.WRISTAROUND) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('weight', MEASURE.WEIGHT_HORSE) ||
'}'
) AS JSON_M
FROM MEASURE
WHERE MEASURE.CODE_HORSE = :C.CODE_HORSE
INTO JSON_M;
JSON_STR = BLOB_APPEND(
JSON_STR,
IIF(JSON_STR IS NULL, '[', ',' || ascii_char(13)),
'{',
JSON_UTILS.INTEGER_PAIR('code_horse', C.CODE_HORSE),
',',
JSON_UTILS.STRING_PAIR('name', C.NAME),
',',
JSON_UTILS.TIMESTAMP_PAIR('birthday', C.BIRTHDAY),
',',
JSON_UTILS.STRING_VALUE('measures') || ':[', JSON_M, ']',
'}'
);
END
JSON_STR = BLOB_APPEND(JSON_STR, ']');
SUSPEND;
END
Un exemple similaire utilisant l’opérateur de concaténation conventionnel ||
est 18 fois plus lent, et effectue 1000 fois plus d’opérations d’écriture sur le disque.
COMPARE_DECFLOAT()
DSQL, PSQL
COMPARE_DECFLOAT (decfloat1, decfloat2)
Paramètre | Description |
---|---|
decfloat1, decfloat2 |
Les valeurs ou expressions de type |
SMALLINT
La fonction COMPARE_DECFLOAT
compare deux valeurs de type DECFLOAT
, qui peuvent être identiques, différentes ou non ordonnées. Les zéros de fermeture sont pris en compte dans la comparaison.
La fonction renvoie :
0
|
Les valeurs sont égales ; |
1
|
La première valeur est inférieure à la seconde ; |
2
|
La première valeur est supérieure à la seconde ; |
3
|
Les valeurs ne sont pas ordonnées (une ou les deux |
Contrairement aux opérateurs de comparaison (‘<
’, ‘=
’, ‘>
’ etc.) la comparaison est exacte,i.e., COMPARE_DECFLOAT(2.17, 2.170)
retournera 2
, et non 0
.
Voir aussi :[fblangref-scalarfuncs-totalorder]
NORMALIZE_DECFLOAT()
DSQL, PSQL
NORMALIZE_DECFLOAT (decfloat_value)
Paramètre | Description |
---|---|
decfloat_value |
Une valeur ou une expression de type |
DECFLOAT
La fonction NORMALIZE_DECFLOAT
renvoie le nombre sous forme normalisée, ce qui signifie que pour toute valeur non nulle, les zéros de fin sont supprimés avec la correction appropriée de l’exposant.
NORMALIZE_DECFLOAT
DECFLOAT
.NORMALIZE_DECFLOAT(12.00) -- renvoi 12
NORMALIZE_DECFLOAT(120) -- renvoi 1.2E+2
QUANTIZE()
DSQL, PSQL
QUANTIZE (decfloat_value, exp_value)
Paramètre | Description |
---|---|
decfloat_value |
Une valeur ou une expression de type |
exp_value |
Une valeur ou une expression à utiliser comme exposant ; doit être de type |
DECFLOAT
La fonction QUANTIZE
renvoie la valeur du premier argument mise à l’échelle en utilisant la deuxième valeur comme modèle. En d’autres termes, la fonction QUANTIZE
renvoie la valeur de DECFLOAT
égale en valeur (à l’exception de tout arrondi) et en signe à decfloat_value, et l’exposant égal en valeur à l’exposant exp_value.La fonction QUANTIZE
peut être utilisée pour implémenter l’arrondi au chiffre le plus proche, comme l’arrondi au cent le plus proche en utilisant le mode d’arrondi défini DECFLOAT
.
Le type de la valeur de retour est DECFLOAT(16)
si les deux arguments sont DECFLOAT(16)
, sinon le type du résultat est DECFLOAT(34)
.
Note
|
La cible est l’exposant utilisé dans le format de stockage |
Si la valeur decfloat est supérieure à la valeur exp, la valeur decfloat est multipliée par une puissance de dix et sa valeur est diminuée, si la valeur est inférieure, sa valeur est arrondie en utilisant le mode d’arrondi decfloat actuel et sa valeur est augmentée.
Lorsque l’exposant cible ne peut pas être atteint parce que le quotient dépasse la précision cible (16 ou 34 décimales), alors soit l’erreur “Decfloat float invalid operation”, soit NaN
est retournée (selon la configuration actuelle des pièges decfloat).
Il n’y a pratiquement aucune restriction sur les exp_value.Cependant, dans presque tous les cas où NaN
/sNaN
/Infinity
est utilisé, une exception sera levée(sauf si cela est autorisé par la configuration actuelle des pièges decfloat)
Si l’une des valeurs est NULL
, le résultat de la fonction sera NULL
, etc.
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()
DSQL, PSQL
TOTALORDER (decfloat1, decfloat2)
Paramètre | Description |
---|---|
decfloat1, decfloat2 |
Une valeur ou une expression de type |
SMALLINT
La fonction TOTALORDER
compare deux valeurs de type DECFLOAT
, y compris les valeurs spéciales.La comparaison est exacte. Les zéros de queue sont pris en compte dans la comparaison.
La fonction renvoie :
-1 — si la première valeur est inférieure à la seconde ;
0 — si les valeurs sont égales ;
1 — si la première valeur est supérieure à la seconde.
Les comparaisons des valeurs DEFLOAT
se font dans l’ordre suivant :
-nan < -snan < -inf < -0.1 < -0.10 < -0 < 0 < 0.10 < 0.1 < inf < snan < nan
Voir aussi :[fblangref-scalarfuncs-comparedecfloat]
Firebird 5.0 ne prend en charge qu’un sous-ensemble d’algorithmes de chiffrement symétrique (à la fois par blocs et par flux), et RSA.
CRYPT_HASH()
DSQL, PSQL
CRYPT_HASH (value USING <algorithm>) <algorithm> ::= { MD5 | SHA1 | SHA256 | SHA512 | SHA3_224 | SHA3_256 | SHA3_384 | SHA3_512 }
Paramètre | Description |
---|---|
value |
Une expression de n’importe quel type. Les types non-voyants et non-binaires sont convertis en chaînes de caractères. |
algorithm |
Algorithme de hachage. |
VARBINARY
La fonction CRYPT_HASH
renvoie un hachage cryptographique de la chaîne d’entrée en utilisant l’algorithme spécifié. Cette fonction supporte entièrement les BLOB
de texte de n’importe quelle longueur et avec n’importe quel jeu de caractères. La clause USING
vous permet de spécifier l’algorithme par lequel le hachage est calculé.
Note
|
L’utilisation des algorithmes |
CRYPT_HASH
CRYPT_HASH
SELECT CRYPT_HASH(x USING SHA256) FROM MyTable;
-- Résultat de type VARBINARY
DECRYPT()
DSQL, PSQL
DECRYPT (encrypted_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
Paramètre | Description |
---|---|
encrypted_input |
BLOB crypté ou chaîne de caractères (binaire) |
algorithm |
Algorithme de cryptage. Les algorithmes de bloc et de flux sont pris en charge. |
mode |
Mode de chiffrement. Obligatoire pour les algorithmes de chiffrement par blocs. |
key |
Clé de cryptage. |
iv |
Vecteur d’initialisation (IV). Doit être spécifié pour tous les ciphers de bloc sauf |
ctr_type |
Ordre des octets du compteur. Ne peut être spécifié qu’en mode |
ctr_length |
Longueur du compteur en octets. Ne peut être spécifié qu’en mode |
initial_counter |
Valeur initiale du compteur. Ne peut être spécifiée que pour l’algorithme |
BLOB
ou VARBINARY
.
La fonction DECRYPT
décrypte les données à l’aide d’un chiffrement symétrique. La taille des chaînes transmises à cette fonction doit répondre aux exigences de l’algorithme et du mode sélectionnés.
DECRYPT
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()
DSQL, PSQL
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
Paramètre | Description |
---|---|
input |
Une expression de type chaîne ou |
algorithm |
Algorithme de cryptage. Les algorithmes de bloc et de flux sont pris en charge. |
mode |
Mode de chiffrement. Obligatoire pour les algorithmes de chiffrement par blocs. |
key |
Clé de cryptage. |
iv |
Vecteur d’initialisation (IV). Doit être spécifié pour tous les ciphers de bloc sauf |
ctr_type |
Ordre des octets du compteur. Ne peut être spécifié qu’en mode |
ctr_length |
Longueur du compteur en octets. Ne peut être spécifié qu’en mode |
initial_counter |
Valeur initiale du compteur. Ne peut être spécifiée que pour l’algorithme |
BLOB
ou VARBINARY
.
La fonction ENCRYPT
permet de crypter des données en utilisant un chiffrement symétrique.
Note
|
|
Les caractéristiques des différents algorithmes et modes dépassent le cadre de ce guide linguistique.
Algorithme | Taille de la clé (octet) | Taille du bloc (octet) | Note |
---|---|---|---|
Cryptage par blocs |
|||
|
16, 24, 32 |
16 |
|
|
16 - 40, par incréments 4 |
16 |
|
|
8 - 56 |
8 |
|
|
16 |
8 |
|
|
8 - 128 |
8 |
|
|
8 - 128 |
16 |
|
|
16, 24, 32 |
16 |
|
|
16, 24, 32 |
16 |
|
|
16 |
8 |
|
Cryptage en ligne |
|||
|
16, 32 |
1 |
La taille (IV) est de 8 ou 12 octets. Pour la taille 8, initial_counter est un entier de 64 bits, pour la taille 12, c’est un entier de 32 bits. |
|
5 - 256 |
1 |
|
|
4x |
1 |
La taille (IV) est de 4y octets, la longueur est indépendante de la taille de la clé. |
ENCRYPT
select encrypt('897897' using sober128 key 'AbcdAbcdAbcdAbcd' iv '01234567')
from rdb$database;
RSA_PRIVATE()
DSQL, PSQL
RSA_PRIVATE (size)
Paramètre | Description |
---|---|
size |
Taille de la clé en octets. |
VARBINARY
La fonction RSA_PRIVATE
renvoie la clé privée RSA d’une longueur donnée (en octets) au format PKCS#1 sous forme de chaîne VARBINARY
.
RSA_PRIVATE
select rdb$set_context('USER_SESSION', 'private_key', rsa_private(256))
from rdb$database;
RSA_PUBLIC()
DSQL, PSQL
RSA_PUBLIC (private-key)
Paramètre | Description |
---|---|
private-key |
Clé privée RSA. |
VARBINARY
La fonction RSA_PUBLIC
renvoie la clé publique RSA pour une clé privée RSA donnée. Les deux clés doivent être au format PKCS#1.
RSA_PUBLIC
La clé privée doit être initialisée auparavant, voir l’exemple dans RSA_PRIVATE
select rdb$set_context('USER_SESSION', 'public_key',
rsa_public(rdb$get_context('USER_SESSION', 'private_key')))
from rdb$database;
RSA_ENCRYPT()
DSQL, PSQL
RSA_ENCRYPT (<data> KEY <public_key> [LPARAM <tag>] [HASH <hash>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Paramètre | Description |
---|---|
data |
Données (chaîne ou BLOB) à crypter. |
public_key |
La clé publique RSA retournée par la fonction |
tag |
Une balise système facultative qui peut être utilisée pour déterminer quel système a encodé le message. La valeur par défaut est |
hash |
Algorithme de hachage. La valeur par défaut est SHA256. |
VARBINARY
Remplit les données à l’aide de la complétion OAEP et les crypte à l’aide de la clé publique RSA. Généralement utilisé pour crypter des clés symétriques courtes, qui sont ensuite utilisées dans des ciphers de bloc pour crypter le message.
RSA_ENCRYPT
La clé publique doit être initialisée auparavant, voir l’exemple dans [fblangref-scalarfuncs-rsa_public]
select rdb$set_context('USER_SESSION', 'msg',
rsa_encrypt('Some message' key rdb$get_context('USER_SESSION', 'public_key')))
from rdb$database;
RSA_DECRYPT()
DSQL, PSQL
RSA_DECRYPT (<data> KEY <private_key> [LPARAM <tag>] [HASH <hash>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Paramètre | Description |
---|---|
data |
Données (chaîne ou BLOB) à décrypter. |
private_key |
La clé privée RSA retournée par la fonction |
tag |
Balise système optionnelle. Doit être la même valeur que celle passée à |
hash |
Algorithme de hachage. La valeur par défaut est SHA256. |
VARCHAR
Déchiffre à l’aide d’une clé privée RSA et supprime les données augmentées par l’OAEP.
La clé privée doit être initialisée plus tôt, voir l’exemple dans [fblangref-scalarfuncs-rsa_private]. Les données de déchiffrement sont utilisées à partir de l’exemple dans [fblangref-scalarfuncs-rsa_encrypt].
select RSA_DECRYPT(rdb$get_context('USER_SESSION', 'msg')
key rdb$get_context('USER_SESSION', 'private_key'))
from RDB$DATABASE;
RSA_SIGN_HASH()
DSQL, PSQL
RSA_SIGN_HASH (<data> KEY <private_key> [HASH <hash>] [SALT_LENGTH <length>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Paramètre | Description |
---|---|
data |
Données (chaîne ou BLOB) à encoder. |
private_key |
La clé privée RSA retournée par la fonction |
hash |
Algorithme de hachage. La valeur par défaut est SHA256. |
length |
Indique la longueur du sel souhaité et doit généralement être petite. Une bonne valeur se situe entre 8 et 16. |
VARBINARY
Effectue le codage PSS du condensé du message pour la signature et le signe en utilisant la clé privée RSA. Renvoie la signature du message.
RSA_SIGN_HASH
La clé privée doit être initialisée plus tôt voir l’exemple dans [fblangref-scalarfuncs-rsa_private].
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()
DSQL, PSQL
RSA_VERIFY_HASH (<data> SIGNATURE <signature> KEY <public_key> [HASH <hash>] [SALT_LENGTH <length>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Paramètre | Description |
---|---|
data |
Données (chaîne ou BLOB) à encoder. |
signature |
Signature. Doit être la valeur renvoyée par la fonction |
public_key |
La clé publique RSA retournée par la fonction |
hash |
Algorithme de hachage. La valeur par défaut est |
length |
Indique la longueur du sceau souhaité et doit généralement être petite.Une bonne valeur se situe entre 8 et 16. |
BOOLEAN
Effectue le codage PSS du condensé du message pour la signature et vérifie sa signature numérique en utilisant la clé publique RSA. Renvoie le résultat de la vérification de la signature.
RSA_VERIFY_HASH
La clé publique doit être initialisée plus tôt voir exemple dans [fblangref-scalarfuncs-rsa_public]. La signature numérique est obtenue plus tôt avec [fblangref-scalarfuncs-rsa_sign_hash].
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;
CAST()
DSQL, PSQL
CAST(value | NULL AS <type>) <type> ::= <datatype> | [TYPE OF] domain | TYPE OF COLUMN relname.colname <datatype> ::= <scalar_datatype> | <blob_datatype> | <array_datatype> <scalar_datatype> ::= Voir Syntaxe des types de données scalaires. <blob_datatype> ::= Voir Syntaxe du type de données BLOB. <array_datatype> ::= Voir syntaxe des tableaux.
Paramètre | Description |
---|---|
value |
Expression SQL. |
datatype |
Type de données SQL. |
domain |
Domaine. |
relname |
Le nom d’une table ou d’une vue. |
colname |
Le nom de la colonne de la table ou de la vue. |
<type>
.
La fonction CAST est utilisée pour convertir explicitement des données d’un type de données vers un autre type de données ou un autre domaine. Si cela n’est pas possible, une erreur sera émise.
Type d’origine | Type en sortie |
---|---|
Type numérique |
Types numériques, |
|
|
|
|
|
|
|
|
Notez que parfois des informations peuvent être perdues, par exemple lorsque vous convertissez le type TIMESTAMP
en DATE
.De plus, le fait que les types soient compatibles pour la fonction CAST
ne garantit pas que la conversion sera réussie.“CAST (123456789 AS SMALLINT)” provoquera certainement une erreur, tout comme “CAST('Judgement Day' as DATE)”.
Vous pouvez appliquer une conversion de type aux paramètres de l’opérateur :
CAST (? AS INTEGER)
Cela vous permet de contrôler le type de champs de saisie.
Lors de la conversion vers un domaine, toute restriction (NOT NULL et/ou CHECK) déclarée pour le domaine doit être satisfaite, sinon la conversion n’aura pas lieu. Rappelez-vous que la vérification CHECK passe si son calcul donne VRAI ou UNKNOWN (NULL). Pour les opérateurs suivants :
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)
seul (1) se terminera par une erreur.
Si le modificateur TYPE OF
est utilisé, l’expression sera convertie au type de base du domaine, en ignorant les contraintes. Pour le domaine quint déclaré ci-dessus, les deux conversions seront équivalentes et les deux réussiront :
SELECT CAST (2000 AS TYPE OF quint) FROM rdb$database
SELECT CAST (2000 AS INT) FROM rdb$database
Lorsque TYPE OF
est utilisé avec le type [VAR]CHAR
, son jeu de caractères et son ordre de tri (collate) sont conservés.
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;
-- returns Deze -> Die -> deze -> die
SELECT CAST(zin AS TYPE OF dunl20) FROM zinnen ORDER BY 1;
-- returns deze -> Deze -> die -> Die
Warning
|
Si la définition du domaine est modifiée, les conversions existantes du domaine ou de son type peuvent devenir erronées. Si de telles conversions se produisent dans les modules PSQL, leurs erreurs peuvent être détectées. Champ d’application RDB$VALID_BLR. |
Permet de convertir une expression en un type de colonne d’une table ou d’une vue existante. Seul le type lui-même sera utilisé, pour les types de chaînes de caractères, le même jeu de caractères sera utilisé, mais pas la séquence de tri. Les restrictions et les valeurs par défaut de la colonne originale ne sont pas appliquées.
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
|
Si la définition d’une colonne est modifiée, les conversions existantes de son type peuvent devenir erronées. Si de telles conversions se produisent dans les modules PSQL, leurs erreurs peuvent être détectées. Champ RDB$VALID_BLR. |
SELECT CAST ('12' || '-June-' || '1959' AS DATE) FROM rdb$database
Notez que dans certains cas, vous n’aurez pas besoin d’utiliser la syntaxe de conversion comme dans l’exemple ci-dessus, car Firebird comprendra à partir du contexte (comparaison avec un champ DATE
) comment interpréter la chaîne :
UPDATE People SET AgeCat = 'Old'
WHERE BirthDate < '1-Jan-1943'
Mais cela n’est pas toujours possible. La conversion dans l’exemple ci-dessous ne peut pas être omise car le système essaiera de convertir la chaîne en un nombre afin de lui soustraire un nombre :
SELECT CAST('TODAY' AS DATE) - 7 FROM rdb$database
BIN_AND()
DSQL, PSQL
BIN_AND (number, number [, number ...])
Paramètre | Description |
---|---|
number |
Entier. |
SMALLINT
, INTEGER
, BIGINT
ou INT128
La fonction BIN_AND
renvoie le résultat de l’opération ET binaire des arguments.
[fblangref-scalarfuncs-bin-or], [fblangref-scalarfuncs-bin-xor].
BIN_NOT()
DSQL, PSQL
BIN_NOT (number)
Paramètre | Description |
---|---|
number |
Entier. |
SMALLINT
, INTEGER
, BIGINT
ou INT128
La fonction BIN_NOT
renvoie le résultat d’une opération NOT
au sens du bit sur l’argument.
[fblangref-scalarfuncs-bin-or], [fblangref-scalarfuncs-bin-and].
BIN_OR()
DSQL, PSQL
BIN_OR (number, number [, number ...])
Paramètre | Description |
---|---|
number |
Entier. |
SMALLINT
, INTEGER
, BIGINT
ou INT128
La fonction BIN_OR
renvoie le résultat de l’opération "bitwise OR" des arguments.
[fblangref-scalarfuncs-bin-and], [fblangref-scalarfuncs-bin-xor].
BIN_SHL()
DSQL, PSQL
BIN_SHL (number, shift)
Paramètre | Description |
---|---|
number |
Entier. |
shift |
Le nombre de bits par lequel la valeur number est décalée. |
BIGINT
ou INT128
.
La fonction BIN_SHL
renvoie le premier paramètre décalé bit à bit de la valeur du second paramètre, c’est-à-dire a << b
ou a-2b
.
BIN_SHR()
DSQL, PSQL
BIN_SHR (number, shift)
Paramètre | Description |
---|---|
number |
Entier. |
shift |
Le nombre de bits par lequel la valeur numérique est décalée. |
BIGINT
ou INT128
.
La fonction BIN_SHR
renvoie le premier paramètre décalé bit à bit de la valeur du second paramètre, c’est-à-dire a >> b
ou a/2b
.
L’opération effectuée est un décalage arithmétique vers la droite (SAR), ce qui signifie que le signe du premier opérande est toujours conservé.
BIN_XOR()
DSQL, PSQL
BIN_XOR (number, number [, number ...])
Paramètre | Description |
---|---|
number |
Entier. |
SMALLINT
, INTEGER
, BIGINT
ou INT128
La fonction BIN_XOR
renvoie le résultat de l’opération XOR
bit à bit des arguments.
[fblangref-scalarfuncs-bin-and], [fblangref-scalarfuncs-bin-or].