Některé DBMS mají funkce, které nám umožňují formátovat čísla jako měnu pouhým předáním příslušného formátovacího řetězce. Tím se číslo převede na řetězec s příslušným symbolem měny, oddělovačem skupiny a desetinnou čárkou (je-li to relevantní).
Jiné DBMS to neusnadňují a vy musíte nejprve udělat trochu práce.
Níže jsou uvedeny příklady použití SQL k formátování čísel jako měny v některých z nejpopulárnějších DBMS.
Oracle
Oracle Database nám poskytuje TO_CHAR(number)
funkce, která nám umožňuje formátovat čísla předáním formátovacího modelu (nebo formátovacího řetězce). Tuto funkci můžeme použít k vrácení čísla jako měny.
Oracle poskytuje několik prvků formátu pro vrácení symbolu měny v závislosti na tom, jaký symbol měny požadujete – symbol místní měny, symbol měny ISO nebo symbol duální měny.
Zde je příklad všech tří:
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;
Výsledek:
r1 r3 r3 ______________ _______________ _____________ kr12.345,00 DKK12.345,00 €12.345,00
Další informace a příklady naleznete v části Jak formátovat číslo jako měnu v Oracle.
SQL Server
SQL Server poskytuje funkci FORMAT(), která nám umožňuje formátovat čísla a data. C
specifikátor formátu lze použít k vrácení čísla jako měny:
SELECT FORMAT(1234, 'C');
Výsledek:
$1,234.00
S formátovacím řetězcem můžete dělat i další věci, například určit, kolik desetinných míst se má vrátit.
Funkce také přijímá volitelný třetí argument, který lze použít k určení národního prostředí, které se má použít pro formátování čísla a měny. Různá národní prostředí používají různé konvence pro svá čísla a měnu.
Další informace a příklady naleznete v části Jak formátovat čísla jako měnu na serveru SQL Server (T-SQL).
PostgreSQL
PostgreSQL má money
datový typ, který bude při výstupu obvykle formátován v místní měně:
SELECT CAST(3145 as money);
Výsledek:
$3,145.00
PostgreSQL má také TO_CHAR()
funkce, která převede hodnotu na řetězec a naformátuje ji na základě dodaného formátovacího řetězce. Proto jej můžeme použít k formátování čísel jako měny předáním příslušného formátovacího řetězce.
Další informace naleznete v části Jak formátovat čísla jako měnu v PostgreSQL.
MySQL
V MySQL musíme udělat trochu více práce. MySQL nám neposkytuje specifikátor formátu pro symbol měny, takže musíme poskytnout svůj vlastní:
SELECT CONCAT('$', FORMAT(1234.5678, 2));
Výsledek:
$1,234.57
Zde jsme použili CONCAT()
funkci pro spojení symbolu měny a čísla a použili jsme FORMAT()
funkci naformátovat číslo do požadovaného formátu.
Je možné určit národní prostředí pro číselné formátování. To určuje, které znaky se použijí pro oddělovač skupiny a desetinnou čárku.
Další informace naleznete v části Jak formátovat čísla jako měnu v MySQL.
MariaDB
MariaDB je velmi podobná MySQL a můžeme použít stejnou metodu, kterou jsme použili s MySQL.
Zde je příklad, který určuje národní prostředí, které se má použít pro formátování čísel:
SELECT CONCAT('€', FORMAT(8790.2398, 2, 'de_DE'));
Výsledek:
€8.790,24
V tomto případě jsme dodali symbol eura (€
) a naformátovali číslo tak, aby používala konvence číslování používané v Německu.
Další informace naleznete v části Formátování čísla jako měny v MariaDB.
SQLite
SQLite má PRINTF()
funkce, která nám umožňuje formátovat číslo na základě formátovacího řetězce. Můžeme to například použít k formátování čísla na daný počet desetinných míst plus přidat symbol měny.
SELECT PRINTF("$%.2f", 123.457);
Výsledek:
$123.46
Aktualizovat :SQLite 3.38.0 (vydáno 22. února 2022) přejmenováno na PRINTF()
funkce na FORMAT()
. Původní PRINTF()
jméno je zachováno jako alias pro zpětnou kompatibilitu.
Výše uvedený příklad lze tedy změnit na tento:
SELECT FORMAT("$%.2f", 123.457);
Výsledek:
$123.46
Další informace o FORMAT()
naleznete v dokumentaci SQLite funkce.