sql >> Database >  >> RDS >> Sqlserver

Getallen opmaken met komma's in SQL Server

SQL Server biedt ons een snelle en gemakkelijke manier om getallen op te maken met komma's op de relevante plaats. Bijvoorbeeld 1234.56 kan 1.234,56 . worden . Of het kan 1.234,56 . worden , als dat de landinstelling is die u gebruikt.

Voorbeeld

We kunnen de FORMAT() . gebruiken functie om getallen op te maken met komma's. Wanneer we deze functie gebruiken, geven we het getal en een notatiereeks door. De opmaakreeks bepaalt hoe het getal wordt opgemaakt wanneer het wordt geretourneerd.

De FORMAT() functie retourneert een opgemaakte tekenreeksrepresentatie van het getal, op basis van de waarden die we verstrekken.

Hier is een voorbeeld om te demonstreren:

SELECT 
    FORMAT(123456.789, 'N') AS "Number",
    FORMAT(123456.789, 'P') AS "Percent",
    FORMAT(123456.789, 'C') AS "Currency";

Resultaat:

+------------+----------------+-------------+
| Number     | Percent        | Currency    |
|------------+----------------+-------------|
| 123,456.79 | 12,345,678.90% | $123,456.79 |
+------------+----------------+-------------+

Dit voorbeeld demonstreert drie van de standaard numerieke notatiereeksen:

  • Als we alleen het opgemaakte getal willen, kunnen we N . gebruiken
  • Als we willen dat het wordt opgemaakt als een percentage, kunnen we P . gebruiken
  • Voor valuta kunnen we C . gebruiken .

SQL Server is slim genoeg om uw huidige landinstelling te kennen (op basis van de taal van de huidige sessie) en maakt het resultaat op volgens de conventies van die landinstelling. Dit is belangrijk, omdat niet iedereen in een land woont dat een komma gebruikt als scheidingsteken voor duizendtallen en een punt als decimaalteken scheidingsteken.

Verder is de FORMAT() functie accepteert een derde optioneel "cultuur" -argument, waarmee u de landinstelling expliciet kunt specificeren.

Hier is een voorbeeld van wat ik bedoel:

SELECT 
    FORMAT(123456.789, 'N', 'de-de') AS "Number",
    FORMAT(123456.789, 'P', 'de-de') AS "Percent",
    FORMAT(123456.789, 'C', 'de-de') AS "Currency";

Resultaat:

+------------+-----------------+--------------+
| Number     | Percent         | Currency     |
|------------+-----------------+--------------|
| 123.456,79 | 12.345.678,90 % | 123.456,79 € |
+------------+-----------------+--------------+

In dit geval specificeer ik de-de als de cultuur, wat betekent dat de resultaten worden opgemaakt volgens Duitse conventies. We kunnen zien dat punten worden gebruikt als groepsscheidingsteken en een komma voor de decimale scheidingsteken.

Als het derde argument wordt weggelaten, wordt de taal van de huidige sessie gebruikt.

Aangepaste opmaakstrings

Het is ook mogelijk om aangepaste formaatspecificaties te gebruiken om uw eigen aangepaste formaatstrings te construeren. Bijvoorbeeld de # teken is een tijdelijke aanduiding voor cijfers, de 0 is een tijdelijke aanduiding voor nul, de komma (, ) is een tijdelijke aanduiding voor het groepsscheidingsteken en de punt (. ) is een tijdelijke aanduiding voor de decimale scheidingsteken.

Dit geldt ongeacht de landinstelling die wordt gebruikt - SQL Server zal bepalen welke tekens moeten worden gebruikt voor de groep en de decimale scheidingstekens op basis van de huidige landinstelling.

Voorbeeld:

SELECT 
    FORMAT(123456.789, '###,###,###.##', 'en-us') AS "US English",
    FORMAT(123456.789, '###,###,###.##', 'de-de') AS "German";

Resultaat:

+--------------+------------+
| US English   | German     |
|--------------+------------|
| 123,456.79   | 123.456,79 |
+--------------+------------+

In beide gevallen heb ik dezelfde indelingsreeks gebruikt, maar SQL Server retourneerde de groep en de decimale scheidingstekens die van toepassing waren op de opgegeven landinstelling (die was opgegeven met het derde argument "cultuur").

In het bovenstaande voorbeeld bevat de notatiereeks meer cijfers dan het werkelijke aantal. Hoe dan ook, SQL Server heeft ervoor gekozen om geen voorloopnullen te retourneren. Dat komt omdat we de # . hebben gebruikt formaatspecificatie.

Als we willen dat SQL Server voorloopnullen retourneert, kunnen we de 0 . gebruiken formaatspecificatie:

SELECT 
    FORMAT(123456.789, '000,000,000.00', 'en-us') AS "US English",
    FORMAT(123456.789, '000,000,000.00', 'de-de') AS "German";

Resultaat:

+----------------+----------------+
| US English     | German         |
|----------------+----------------|
| 000,123,456.79 | 000.123.456,79 |
+----------------+----------------+

  1. Vergelijking van full text zoekmachine - Lucene, Sphinx, Postgresql, MySQL?

  2. Wat is DBMS? – Een uitgebreide gids voor databasebeheersystemen

  3. Oracle:meerdere tabelupdates => ORA-01779:kan geen kolom wijzigen die is toegewezen aan een niet-sleutelbewaarde tabel

  4. Beveiligingsbenaderingen in gegevensmodellering. Deel 4