Повечето основни RDBMS ни предоставят начини за форматиране на числа с помощта на SQL. Някои предоставят само основни възможности за форматиране, докато други са по-напреднали.
По-долу са дадени примери за форматиране на число в някои от по-популярните RDBMS.
MySQL
В MySQL можем да използваме FORMAT()
функция за форматиране на число в определен формат. Тази функция приема три параметъра; числото, броя на десетичните знаци и незадължителен локал:
SELECT FORMAT(123456.789, 2);
Резултат:
123,456.79
Както споменахме, можете също да подадете трети аргумент, за да посочите локала, който да използвате за шаблона за форматиране. Вижте как да форматирате числа в MySQL за пример.
За да форматирате числата като валута, вижте Как да форматирате числата като валута в MySQL.
Оракул
Oracle Database ни предоставя редица опции, когато става въпрос за форматиране на числа.
По-специално, TO_CHAR(number)
функцията ни позволява да форматираме число въз основа на нашия собствен персонализиран модел на формат.
Пример:
SELECT
TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;
Резултат:
$12,345.00
Първият аргумент е числото за форматиране, а вторият аргумент е моделът на форматиране. Форматният модел се състои от един или повече форматни елементи, всеки от които представлява различен елемент във форматирания изход.
В горния пример използваме use 9
символ за представяне на всяка цифра и 0
знак за извеждане на цифрата или нулата (в зависимост от това дали цифра съществува или не в тази позиция). Ние също така използваме G
за разделител на групата с информация за локал и D
за десетичен разделител, който знае локал. fm
елементът потиска всички водещи или последващи допълване, които могат да бъдат приложени към резултата.
Ето пълен списък с елементи на формат, които можете да използвате за своя модел на формат, когато форматирате числа.
Има и други начини за форматиране на числа в Oracle. Например, LPAD()
функцията може да се използва за преобразуване на числа в низ и форматирането им точно както желаете в движение. Функции като CAST()
може също да има ефект върху това как се форматира числото в зависимост от типа данни, към който се предава.
Вижте Как да форматирате числа в Oracle за повече подробности и примери.
PostgreSQL
Подобно на Oracle, PostgreSQL също има TO_CHAR()
функция и работи почти по същия начин:
SELECT TO_CHAR(923, 'fm000G000th');
Резултат:
000,923rd
Тук използвах 0
форматен елемент за извеждане на водещи нули, дори когато оригиналното число не съдържа никакви цифри на това място. В този случай използвах th
формат елемент за преобразуване на числото в неговия порядък. Използвах и G
за разделител на групата, който знае локал.
Ето списък с шаблони, от които може да се състои низът за форматиране при форматиране на числа, както и модификаторите на формата.
Друг начин за форматиране на число в PostgreSQL е конвертирането му в money
тип данни. Числата, съхранени като money
типът се извежда във формат, който е наясно с локала, с подходящ символ за валута, разделител на група, десетичен разделител и т.н.:
SELECT CAST(10000 as money);
Резултат:
$10,000.00
Вижте Как да форматирате числа в PostgreSQL за повече примери за форматиране на числа в PostgreSQL.
SQL сървър
SQL Server има FORMAT()
функция, която работи много като TO_CHAR()
на Oracle и PostgreSQL функция, тъй като ви позволява да форматирате числа въз основа на форматиращ низ:
SELECT
FORMAT(123456.789, 'N') AS "Number",
FORMAT(123456.789, 'P') AS "Percent",
FORMAT(123456.789, 'C') AS "Currency";
Резултат:
+------------+----------------+-------------+ | Number | Percent | Currency | |------------+----------------+-------------| | 123,456.79 | 12,345,678.90% | $123,456.79 | +------------+----------------+-------------+
Този пример демонстрира три стандартни спецификатора на формат – всеки от които извежда числото в определен формат.
Можем също да използваме наши собствени персонализирани спецификатори на формат, които ни позволяват да изработим собствен формат, в случай че стандартният формат не е това, което искаме.
Можете също да правите неща като форматиране на числата в техния шестнадесетичен еквивалент или използване на експоненциална нотация и т.н.
И можете да подадете незадължителен трети аргумент, за да посочите локала, за който да форматирате числото (той форматира числото, използвайки конвенциите на този локал).
Вижте Как да форматирате числа в SQL Server за повече примери.
MariaDB
Подобно на MySQL, MariaDB има FORMAT()
функция, която осигурява основно форматиране на числата.
Ето пример за използване на тази функция за форматиране на число, използвайки различни локали:
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";
Резултат:
+--------------+-----------------+--------------------+ | Tamil, India | German, Germany | Chinese, Hong Kong | +--------------+-----------------+--------------------+ | 1,23,456.79 | 123.456,79 | 123,456.79 | +--------------+-----------------+--------------------+
Вижте Как да форматирате числа в MariaDB за повече примери.
SQLite
SQLite е по-ограничен от другите СУБД, когато става въпрос за форматиране на числа. Има обаче начини да получите някакво основно форматиране на числата:
SELECT PRINTF("%,d", 123456789);
Резултат:
123,456,789
PRINTF()
функцията може да извежда групови разделители за цели числа, но не и за числа с реални/с плаваща запетая. За да форматирате реални числа/числа с плаваща запетая, ще трябва да свършите малко повече работа. Вижте Форматиране на числа със запетая в SQLite за пример за това, което имам предвид.
Актуализиране :SQLite 3.38.0 (издадена на 22 февруари 2022 г.) преименува PRINTF()
функция към FORMAT()
. Оригиналният PRINTF()
името се запазва като псевдоним за обратна съвместимост.
Така че горният пример може да бъде променен на това:
SELECT FORMAT("%,d", 123456789);
Резултат:
123,456,789