Започвайки от SQL Server 2012, можете да форматирате числови типове с помощта на T-SQL FORMAT()
функция. Тази функция приема три аргумента; числото, формата и незадължителен аргумент „култура“.
Връща форматиран низ от тип nvarchar .
Форматът се предоставя като форматен низ. Низ за форматиране определя как трябва да бъде форматиран изходът.
Ето един пример:
SELECT FORMAT(1, 'N');
Резултат:
1.00
В този случай използвах N
като втори аргумент. Това е стандартният спецификатор на числов формат за число. Този конкретен спецификатор на формат (N
) води до форматиране на изхода с интегрални и десетични цифри, разделители на групи и десетичен разделител с незадължителен отрицателен знак. Този аргумент не е чувствителен към малки и големи букви, така че или N
или n
е добре.
Десични знаци
Ето още един пример, този път с помощта на N1
за да уточним, че искаме само един знак след десетичната запетая:
SELECT FORMAT(1, 'N1');
Резултат:
1.0
Но можете също да увеличите броя на десетичните знаци:
SELECT FORMAT(1, 'N7');
Резултат:
1.0000000
В тези примери 1
и 7
са известни като прецизни спецификатори .
Прецизните спецификатори не са задължителни. Те могат да бъдат стойности от 0 до 99, което определя точността на резултата. Как работи зависи от използвания спецификатор на формат. За някои спецификатори на формат той ще посочи общия брой цифри в резултата, за други ще посочи броя на десетичните знаци. В други случаи той ще бъде игнориран напълно. Вижте пълния списък на спецификаторите на стандартния числов формат, за да видите как прецизните спецификатори влияят на изхода от всеки спецификатор на формат.
Процент
Следващите примери използват P
аргумент, който форматира числото като процентна стойност. Умножава числото по 100, след което добавя локализиран знак за процент.
SELECT FORMAT(1, 'P') AS 'Example 1', FORMAT(.375, 'P') AS 'Example 2', FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';
Резултат:
Example 1 Example 2 Example 3 --------- --------- --------- 100.00 % 37.50 % %3,75
Обърнете внимание, че „Пример 3“ включва трети аргумент, който определя културата, която да се използва в изхода. В този случай използвам tr-tr
за турски. Това води до знака за процент, който се добавя към числото (вместо да се добавя, както другите). Това също води до използване на запетая като десетичен разделител.
Ако не предоставите аргумента „култура“, се използва езикът на текущата сесия.
Както може да си представите, можете да получите доста различни резултати в зависимост от текущия ви език или стойността на всеки аргумент за „култура“. Вижте как езиковите настройки могат да повлияят на вашите резултати FORMAT() за още примери.
Валута
Можете да използвате C
за да върнете валутна стойност.
SELECT FORMAT(1, 'C');
Резултат:
$1.00
Можете също да добавите локала като трети параметър.
Ето няколко примера:
SELECT FORMAT(1, 'C', 'fr-FR') AS France, FORMAT(1, 'C', 'th-TH') AS Thailand, FORMAT(1, 'C', 'ja-JP') AS Japan;
Резултат:
France Thailand Japan ------ -------- ----- 1,00 € ฿1.00 ¥1
Експоненциален (научен)
Можете да използвате E
за да посочите експоненциална нотация.
SELECT FORMAT(1234.56789, 'E');
Резултат:
1.234568E+003
Шестнадесетичен
Можете дори да форматирате число като шестнадесетично. За да направите това, използвайте X
аргумент:
SELECT FORMAT(10, 'X');
Резултат:
A
Шестнадесетичният знак е на база 16. Следователно броят е 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, преди да започне отново (напр. 10 в шестнадесетичен е еквивалентът от 16 в десетичната запетая, а 11 е еквивалент на 17 и т.н.). Ето защо примерът тук води до A
, тъй като в шестнадесетичен, A
идва след 9
.
Ето още един пример, този път с по-голямо число:
SELECT FORMAT(7145, 'X');
Резултат:
1BE9
Персонализиран формат
Можете също да създадете свой собствен персонализиран формат, като използвате низ за персонализиран цифров формат. Това се състои от поредица от персонализирани спецификатори на цифров формат, които предоставят шаблон за вашия номер.
Това се обяснява по-лесно с пример:
SELECT FORMAT(123456789, '##-###-####');
Резултат:
12-345-6789
В този случай използвам символа за място (#
). Заместителят за цифри ми позволява да посоча формат за числото, използвайки #
символ като заместител за всяко число.
Запетаи
Друг пример:
SELECT FORMAT(123456789, '#,#');
Резултат:
123,456,789
Водещи нули
Друг персонализиран спецификатор на числов формат е нула (0
). Можете да използвате това, за да допълните число с водещи нули:
SELECT FORMAT(7, '000') AS 'Example 1', FORMAT(123, '0000') AS 'Example 2', FORMAT(123, '00000') AS 'Example 3';
Резултат:
Example 1 Example 2 Example 3 --------- --------- --------- 007 0123 00123
Можете също да го използвате за премахване на нули:
SELECT FORMAT(0123, '000') AS 'Example 1', FORMAT(0123, '0000') AS 'Example 2', FORMAT(000123, '00000') AS 'Example 3';
Резултат:
Example 1 Example 2 Example 3 --------- --------- --------- 123 0123 00123
Справка за спецификатори на числов формат
Следните статии съдържат всички спецификатори на цифров формат, които можете да използвате с FORMAT()
функция, заедно с примери за T-SQL.
- Стандартни низове в цифров формат
- Стрингове с персонализиран цифров формат
Това са същите спецификатори на формат, които се поддържат от .NET Framework (FORMAT()
функцията разчита на .NET Framework).
Дата и час
FORMAT()
функцията също така ви позволява да форматирате дата и час.
Датата и часът имат отделен набор от спецификатори на формат:
- Стандартни низове за формат на дата и час
- Персонализирани низове за формат на дата и час