SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Formatieren Sie Zahlen mit einem Komma in SQLite

SQLite hat ein printf() Funktion oder format() Funktion, mit der wir Zahlen gemäß einer Formatzeichenfolge formatieren können.

Ab SQLite 3.18.0 akzeptiert es ein Komma-Flag, das es uns ermöglicht, Kommatrennzeichen an den Tausenderzeichen für Ganzzahlen zu haben.

Es kann weiter daran gearbeitet werden, dass es mit reellen/Gleitkommazahlen funktioniert.

Beispiel

Hier ist ein Beispiel für die Formatierung einer Ganzzahl mit einem Komma als Tausendertrennzeichen:

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

Ergebnis:

123,456,789

Die Formatzeichenfolge von "%,d" hat dieses Ergebnis bestimmt.

Reelle Zahlen/Gleitkommazahlen

Die obige Lösung funktioniert nur, wenn die Zahl ohne ihren Bruchteil zurückgegeben wird.

Wenden wir diese Formatzeichenfolge auf eine reelle Zahl an:

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

Ergebnis:

1,234,567

Wir erhalten immer noch Kommas als Gruppentrennzeichen, da unser Format-String den Bruchteil nicht enthält.

So geben Sie den Bruchteil zurück:

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

Ergebnis:

1234567.46

Hier der Formatstring von "%.2f" gibt an, dass das Ergebnis zwei Dezimalstellen enthalten soll. Wir könnten "%.3f" verwenden für drei Dezimalstellen usw.

Sie könnten davon ausgehen, dass wir Folgendes tun können:

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

Ergebnis:

1,234,567.2f

Aber das hat eindeutig nicht funktioniert.

SQLite bietet uns keine umfangreichen Formatierungsmöglichkeiten für Zahlen. Die Formatierung von Zahlen kann ziemlich kompliziert sein, und es ist normalerweise besser, die Formatierung auf Anwendungsebene anzuwenden.

Wenn Sie dies jedoch wirklich in SQLite tun müssen, können Sie versuchen, den ganzzahligen Teil mit Kommas zu formatieren und ihn dann mit dem Dezimalteil zu verketten.

Angenommen, wir haben eine Datenbankspalte namens price , die das folgende Ergebnis zurückgibt:

SELECT price FROM Products;

Ergebnis:

5457.99   
1238999.99
11.357    
3.49      
3.0001    
1234567.89
1499.5    
9.49      
149  

Wir könnten etwas in der folgenden Weise tun, um all diese Zahlen mit einem Tausendertrennzeichen und zu formatieren ein Dezimalpunkt:

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

Ergebnis:

5,457.99                                                                                                                                                                                     
1,238,999.99                                                                                                                                                                                 
11.36                                                                                                                                                                                        
3.49                                                                                                                                                                                         
3.00                                                                                                                                                                                         
1,234,567.89                                                                                                                                                                                 
1,499.50                                                                                                                                                                                     
9.49                                                                                                                                                                                         
149.00   

Das format() Funktion

SQLite 3.38.0 (veröffentlicht am 22. Februar 2022) hat printf() umbenannt Funktion zu format() . Das Original printf() Name wird als Alias ​​für Abwärtskompatibilität beibehalten.

Daher kann das erste Beispiel auf dieser Seite wie folgt geändert werden:

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

Ergebnis:

123,456,789