Nogle DBMS'er har funktioner, der giver os mulighed for at formatere tal som valuta blot ved at sende den passende formatstreng. Dette konverterer tallet til en streng med det relevante valutasymbol, gruppeseparator og decimaltegn (hvis relevant).
Andre DBMS'er gør det ikke så nemt, og du skal gøre lidt arbejde først.
Nedenfor er eksempler på brug af SQL til at formatere tal som valuta i nogle af de mest populære DBMS'er.
Oracle
Oracle Database giver os TO_CHAR(number)
funktion, som giver os mulighed for at formatere tal ved at sende en formatmodel (eller formatstreng). Vi kan bruge denne funktion til at returnere et tal som valuta.
Oracle har nogle få formatelementer til at returnere valutasymbolet, afhængigt af hvilket valutasymbol du har brug for – det lokale valutasymbol, ISO-valutasymbolet eller det dobbelte valutasymbol.
Her er et eksempel på alle tre:
ALTER SESSION SET NLS_TERRITORY = 'Denmark';
SELECT
TO_CHAR(12345, 'fmL99G999D00') AS "r1",
TO_CHAR(12345, 'fmC99G999D00') AS "r3",
TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;
Resultat:
r1 r3 r3 ______________ _______________ _____________ kr12.345,00 DKK12.345,00 €12.345,00
Se Sådan formateres et tal som valuta i Oracle for at få flere oplysninger og eksempler.
SQL-server
SQL Server leverer FORMAT()-funktionen, som gør det muligt for os at formatere tal og datoer. C
formatangivelsen kan bruges til at returnere et tal som en valuta:
SELECT FORMAT(1234, 'C');
Resultat:
$1,234.00
Der er andre ting, du kan gøre med formatstrengen, såsom at angive, hvor mange decimaler, der skal returneres.
Funktionen accepterer også et valgfrit tredje argument, som kan bruges til at angive den landestandard, der skal bruges til tal- og valutaformatering. Forskellige lokaliteter bruger forskellige konventioner for deres tal og valuta.
Se Sådan formateres tal som valuta i SQL Server (T-SQL) for at få flere oplysninger og eksempler.
PostgreSQL
PostgreSQL har en money
datatype, der typisk vil blive formateret i lokalvalutaen ved output:
SELECT CAST(3145 as money);
Resultat:
$3,145.00
PostgreSQL har også en TO_CHAR()
funktion, der konverterer værdien til en streng og formaterer den baseret på den formatstreng, vi leverer. Derfor kan vi bruge det til at formatere tal som valuta ved at sende den passende formatstreng.
Se Sådan formateres tal som valuta i PostgreSQL for mere.
MySQL
I MySQL er vi nødt til at arbejde lidt mere. MySQL giver os ikke en formatspecifikation for valutasymbolet, så vi skal give vores egen:
SELECT CONCAT('$', FORMAT(1234.5678, 2));
Resultat:
$1,234.57
Her brugte vi CONCAT()
funktion til at sammenkæde valutasymbolet og tallet, og vi brugte FORMAT()
funktion til at formatere tallet til vores ønskede format.
Det er muligt at angive en lokalitet for den numeriske formatering. Dette bestemmer, hvilke tegn der bruges til gruppeseparator og decimaltegn.
Se Sådan formateres tal som valuta i MySQL for mere information.
MariaDB
MariaDB minder meget om MySQL, og vi kan bruge den samme metode, som vi brugte med MySQL.
Her er et eksempel, der angiver en lokalitet, der skal bruges til talformatering:
SELECT CONCAT('€', FORMAT(8790.2398, 2, 'de_DE'));
Resultat:
€8.790,24
I dette tilfælde har vi leveret eurosymbolet (€
) og formaterede nummeret til at bruge de nummereringskonventioner, der bruges i Tyskland.
Se Formater et tal som valuta i MariaDB for mere information.
SQLite
SQLite har en PRINTF()
funktion, der giver os mulighed for at formatere et tal baseret på en formatstreng. For eksempel kan vi bruge dette til at formatere tallet til et givet antal decimaler, plus tilføje et valutasymbol.
SELECT PRINTF("$%.2f", 123.457);
Resultat:
$123.46
Opdater :SQLite 3.38.0 (frigivet 22. februar 2022) omdøbte PRINTF()
funktion til FORMAT()
. Den originale PRINTF()
navnet bibeholdes som et alias for bagudkompatibilitet.
Så ovenstående eksempel kan ændres til dette:
SELECT FORMAT("$%.2f", 123.457);
Resultat:
$123.46
Se SQLite-dokumentationen for mere om FORMAT()
funktion.