sql >> Database >  >> RDS >> SQLite

Getallen opmaken met een komma in SQLite

SQLite heeft een printf() functie of format() functie waarmee we getallen kunnen opmaken volgens een opmaakreeks.

Vanaf SQLite 3.18.0 accepteert het een kommavlag, wat ons in staat stelt om kommascheidingstekens te gebruiken bij de duizendtallen voor gehele getallen.

Er kan nog meer worden gedaan om het werkend te krijgen met reële/zwevende-kommagetallen.

Voorbeeld

Hier is een voorbeeld van het opmaken van een geheel getal met een komma als scheidingsteken voor duizendtallen:

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

Resultaat:

123,456,789

De opmaakreeks van "%,d" is wat dit resultaat heeft bepaald.

Reële/zwevende kommagetallen

De bovenstaande oplossing werkt alleen als het getal wordt geretourneerd zonder het fractionele deel ervan.

Laten we die notatiereeks toepassen op een reëel getal:

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

Resultaat:

1,234,567

We krijgen nog steeds komma's als scheidingstekens voor groepen, omdat onze opmaakreeks het breukgedeelte niet bevat.

Zo geeft u het breukdeel terug:

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

Resultaat:

1234567.46

Hier de opmaakreeks van "%.2f" geeft aan dat het resultaat twee decimalen moet bevatten. We zouden "%.3f" . kunnen gebruiken voor drie decimalen, enzovoort.

Je zou kunnen aannemen dat we het volgende kunnen doen:

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

Resultaat:

1,234,567.2f

Maar dat werkte duidelijk niet.

SQLite biedt ons geen uitgebreide opmaakmogelijkheden voor getallen. Het opmaken van getallen kan behoorlijk ingewikkeld zijn, en het is meestal beter om opmaak toe te passen op applicatieniveau.

Dat gezegd hebbende, als je dit echt in SQLite moet doen, kun je proberen het gehele deel met de komma's op te maken en dat vervolgens samen te voegen met het decimale deel.

Stel dat we bijvoorbeeld een databasekolom hebben met de naam price , dat geeft het volgende resultaat:

SELECT price FROM Products;

Resultaat:

5457.99   
1238999.99
11.357    
3.49      
3.0001    
1234567.89
1499.5    
9.49      
149  

We zouden iets in de trant van het volgende kunnen doen om al die getallen op te maken met een scheidingsteken voor duizendtallen en een decimale punt:

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

Resultaat:

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

Het format() Functie

SQLite 3.38.0 (uitgebracht op 22 februari 2022) hernoemde de printf() functie naar format() . De originele printf() naam wordt behouden als een alias voor achterwaartse compatibiliteit.

Daarom kan het eerste voorbeeld op deze pagina als volgt worden gewijzigd:

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

Resultaat:

123,456,789

  1. Fix "ERROR 1136 (21S01):Kolomtelling komt niet overeen met waardetelling in rij 1" bij het invoegen van gegevens in MariaDB

  2. Hoe te converteren naar hoofdletters in SQLite

  3. Oracle:hoe INSERT als een rij niet bestaat

  4. Top 50 MySQL-interviewvragen die u in 2022 moet voorbereiden