sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man formaterar tal i SQL

De flesta större RDBMS tillhandahåller sätt för oss att formatera tal med SQL. Vissa har bara grundläggande formateringsmöjligheter, medan andra är mer avancerade.

Nedan finns exempel på formatering av ett nummer i några av de mer populära RDBMS.

MySQL

I MySQL kan vi använda FORMAT() funktion för att formatera ett tal till ett specifikt format. Denna funktion accepterar tre parametrar; numret, antalet decimaler och en valfri plats:

SELECT FORMAT(123456.789, 2);

Resultat:

123,456.79

Som nämnts kan du också skicka ett tredje argument för att ange den språkinställning som ska användas för formateringsmönstret. Se Hur man formaterar tal i MySQL för ett exempel.

För att formatera tal som valuta, se Hur man formaterar tal som valuta i MySQL.

Oracle

Oracle Database ger oss ett antal alternativ när det gäller att formatera siffror.

I synnerhet TO_CHAR(number) funktionen låter oss formatera ett tal baserat på vår egen anpassade formatmodell.

Exempel:

SELECT 
    TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;

Resultat:

$12,345.00

Det första argumentet är numret som ska formateras och det andra argumentet är formatmodellen. Formatmodellen består av ett eller flera formatelement, som vart och ett representerar olika element i den formaterade utdata.

I exemplet ovan använder vi 9 tecken för att representera varje siffra och 0 tecken för att mata ut siffran eller nollan (beroende på om en siffra finns i den positionen eller inte). Vi använder också G för en platsmedveten gruppseparator och D för en platsmedveten decimalavgränsare. fm element undertrycker all inledande eller efterföljande utfyllnad som kan tillämpas på resultatet.

Här är en fullständig lista över formatelement som du kan använda för din formatmodell när du formaterar tal.

Det finns andra sätt att formatera siffror i Oracle. Till exempel, LPAD() funktionen kan användas för att konvertera siffror till en sträng och formatera dem precis som du vill i farten. Funktioner som CAST() kan också ha en effekt på hur ett tal formateras, beroende på vilken datatyp det castas som.

Se Hur man formaterar tal i Oracle för mer information och exempel.

PostgreSQL

Liksom Oracle har PostgreSQL också en TO_CHAR() funktion, och det fungerar på ungefär samma sätt:

SELECT TO_CHAR(923, 'fm000G000th');

Resultat:

000,923rd

Här använde jag 0 formatelement för att mata ut inledande nollor, även när det ursprungliga numret inte hade några siffror på den platsen. I det här fallet använde jag th formatelement för att konvertera talet till dess ordningsföljd. Jag använde också G för en platsmedveten gruppavgränsare.

Här är en lista över mallmönster som formatsträngen kan bestå av vid formatering av siffror, samt formatmodifierare.

Ett annat sätt att formatera ett tal i PostgreSQL är att konvertera det till money data typ. Nummer lagrade som money typ matas ut i ett format som är medvetet om språket, med lämplig valutasymbol, gruppavgränsare, decimalavgränsare, etc:

SELECT CAST(10000 as money);

Resultat:

$10,000.00

Se Hur man formaterar tal i PostgreSQL för fler exempel på formatering av tal i PostgreSQL.

SQL-server

SQL Server har FORMAT() funktion, som fungerar ungefär som Oracle och PostgreSQL:s TO_CHAR() funktion, genom att den låter dig formatera tal baserat på en formatsträng:

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

Resultat:

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

Det här exemplet visar tre standardformatspecifikationer – som var och en matar ut numret i ett specifikt format.

Vi kan också använda våra egna anpassade formatspecifikationer, som gör att vi kan skapa vårt eget format, om standardformatet inte är vad vi vill ha.

Du kan också göra saker som att formatera tal i deras hexadecimala motsvarighet, eller använda exponentiell notation, etc.

Och du kan skicka ett valfritt tredje argument för att specificera platsen för vilken numret ska formateras (det formaterar numret enligt konventionerna för det språket).

Se Hur man formaterar tal i SQL Server för fler exempel.

MariaDB

Precis som MySQL har MariaDB ett FORMAT() funktion, som ger grundläggande nummerformatering.

Här är ett exempel på hur du använder den här funktionen för att formatera ett tal med olika språk:

SELECT 
    FORMAT(123456.789, 2, 'ta_IN') AS "Tamil, India",
    FORMAT(123456.789, 2, 'de_DE') AS "German, Germany",
    FORMAT(123456.789, 2, 'zh_HK') AS "Chinese, Hong Kong";

Resultat:

+--------------+-----------------+--------------------+
| Tamil, India | German, Germany | Chinese, Hong Kong |
+--------------+-----------------+--------------------+
| 1,23,456.79  | 123.456,79      | 123,456.79         |
+--------------+-----------------+--------------------+

Se Hur man formaterar tal i MariaDB för fler exempel.

SQLite

SQLite är mer begränsad än de andra DBMS när det kommer till formatering av siffror. Det finns dock sätt att få lite grundläggande nummerformatering:

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

Resultat:

123,456,789

PRINTF() funktion kan mata ut gruppseparatorer för heltal, men inte för reella tal/flyttal. För att formatera verkliga tal/flyttal måste du göra lite mer arbete. Se Formatera siffror med komma i SQLite för ett exempel på vad jag menar.

Uppdatera :SQLite 3.38.0 (släppt 22 februari 2022) döpte om PRINTF() funktion till FORMAT() . Den ursprungliga PRINTF() namnet behålls som ett alias för bakåtkompatibilitet.

Så exemplet ovan kan ändras till detta:

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

Resultat:

123,456,789

  1. MongoDB $ och Aggregation Pipeline Operator

  2. Kör Heroku bakgrundsuppgifter med endast 1 webbdyno och 0 arbetardyno

  3. Är det möjligt att få fälten i projektionsordning i Aggregation Frameworks mongo

  4. Mongoose duplicate key error med upsert