Exemple NORMALIZE_DECFLOAT
DECFLOAT
.NORMALIZE_DECFLOAT(12.00) -- renvoi 12
NORMALIZE_DECFLOAT(120) -- renvoi 1.2E+2
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
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].