Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да форматирате числа в SQL Server

Започвайки от 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() функцията също така ви позволява да форматирате дата и час.

Датата и часът имат отделен набор от спецификатори на формат:

  • Стандартни низове за формат на дата и час
  • Персонализирани низове за формат на дата и час

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Практичен избор на процесор за SQL Server 2014/2016 OLTP работни натоварвания

  2. Какво е „версия на ред“ в SQL Server?

  3. Функция с стойност на таблица с множество изрази срещу функция с стойност на вградена таблица

  4. Какво означава ПОРЪЧАЙТЕ (ИЗБЕРЕТЕ NULL)?

  5. Възможни начини за коригиране на проблема с повреда на метаданните на SQL Server