SQLite
 sql >> Base de données >  >> RDS >> SQLite

Formater les nombres avec une virgule dans SQLite

SQLite a un printf() fonction ou format() fonction qui nous permet de formater des nombres selon une chaîne de format.

A partir de SQLite 3.18.0, il accepte un drapeau virgule, ce qui nous permet d'avoir des séparateurs virgule aux milliers pour les entiers.

Des travaux supplémentaires peuvent être effectués pour le faire fonctionner avec des nombres réels/à virgule flottante.

Exemple

Voici un exemple de formatage d'un entier avec une virgule comme séparateur de milliers :

SELECT printf("%,d", 123456789); 

Résultat :

123 456 789

La chaîne de format de "%,d" est ce qui a déterminé ce résultat.

Nombres réels/à virgule flottante

La solution ci-dessus ne fonctionne que lors du renvoi du nombre sans sa partie fractionnaire.

Appliquons cette chaîne de format à un nombre réel :

SELECT printf("%,d", 1234567.4567); 

Résultat :

1 234 567

Nous obtenons toujours des virgules comme séparateurs de groupe, car notre chaîne de format n'inclut pas la partie fractionnaire.

Voici comment renvoyer la partie fractionnaire :

SELECT printf("%.2f", 1234567.4567); 

Résultat :

1234567.46

Ici, la chaîne de format de "%.2f" spécifie que le résultat doit inclure deux décimales. Nous pourrions utiliser "%.3f" pour trois décimales, et ainsi de suite.

Vous pouvez supposer que nous pouvons faire ce qui suit :

SELECT printf("%,d.2f", 1234567.4567); 

Résultat :

1 234 567,2f

Mais cela n'a clairement pas fonctionné.

SQLite ne nous fournit pas de capacités de formatage étendues pour les nombres. Le formatage des nombres peut être assez compliqué, et il est généralement préférable d'appliquer le formatage au niveau de l'application.

Cela dit, si vous avez vraiment besoin de le faire dans SQLite, vous pouvez essayer de formater la partie entière avec les virgules, puis de la concaténer avec la partie décimale.

Par exemple, supposons que nous ayons une colonne de base de données appelée price , qui renvoie le résultat suivant :

SELECT price FROM Products; 

Résultat :

5457.99 1238999.9911.357 3.49 3.0001 1234567.891499.5 9.49 149 

Nous pourrions faire quelque chose comme suit pour formater tous ces nombres avec un séparateur de milliers et un point décimal :

SELECT
    printf("%,d", price) 
    || 
    substr(
    printf("%.2f", price), 
    instr(printf("%.2f", price), "."), 
    length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
    )
FROM Products; 

Résultat :

5 457,99 1 238 999,99 11,36 3,49 3,00 1 234 567,89 1 499,50 9,49 149,00

Le format() Fonction

SQLite 3.38.0 (publié le 22 février 2022) a renommé printf() fonction à format() . Le printf() d'origine nom est conservé en tant qu'alias pour la rétrocompatibilité.

Par conséquent, le premier exemple de cette page peut être modifié comme suit :

SELECT format("%,d", 123456789); 

Résultat :

123 456 789