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

Персонализирани низове с цифров формат, поддържани от FORMAT() в SQL Server

Тази статия предоставя справка за персонализираните спецификатори на числов формат, които могат да се използват при форматиране на числа с помощта на FORMAT() функция в SQL Server. Включени примери.

Форматиране на низ Описание/Пример
0

Нулев заместител . Заменя нулата със съответната цифра, ако има една; в противен случай в резултантния низ се появява нула.

Примери :

SELECT 
  FORMAT(12.34, '0') R1,
  FORMAT(012.34, '00') R2,
  FORMAT(12.34, '000') R3,
  FORMAT(012.34, '0000') R4,
  FORMAT(12.54, '00') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 012  | 0012 | 13   |
+------+------+------+------+------+
#

Заместител на цифри . Заменя символа “#” със съответната цифра, ако има такава; в противен случай в резултантния низ не се появява цифра.

В резултатния низ не се появява цифра, ако съответната цифра във входния низ е незначителна 0.

Примери :

SELECT 
  FORMAT(12.34, '#') R1,
  FORMAT(012.34, '##') R2,
  FORMAT(12.34, '###') R3,
  FORMAT(012.34, '####') R4,
  FORMAT(12.54, '##') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 12   | 12   | 13   |
+------+------+------+------+------+
.

десетична запетая . Определя местоположението на десетичния разделител в резултантния низ.

Примери :

SELECT 
  FORMAT(12.34, '0.0', 'en-US') R1,
  FORMAT(12.34, '.00', 'en-US') R2,
  FORMAT(12.34, '.', 'en-US') R3,
  FORMAT(12.34, '.00', 'fr-FR') R4;
+------+-------+------+-------+
| R1   | R2    | R3   | R4    |
|------+-------+------+-------|
| 12.3 | 12.34 | 12   | 12,34 |
+------+-------+------+-------+
,

Разделител на групи и мащабиране на числа . Може да се използва както като разделител на групи (известен също като разделител на хиляда), така и като спецификатор за мащабиране на числа.

  • Като разделител на групи , той вмъква локализиран знак за разделител на групи между всяка група.
  • Като указател за мащабиране на числа , той разделя число на 1000 за всяка посочена запетая.

За да посочите разделител на група, поставете една или повече запетаи между двуцифрени заместители (0 или #), които форматират интегралните цифри на число. Това води до вмъкване на знак за разделител на групи между всяка числова група в неразделната част на изхода.

За да зададете спецификатор за мащабиране на числото, поставете една или повече запетаи непосредствено вляво от явната или неявната десетична запетая.

Примери – Като разделител на група :

SELECT 
  FORMAT(12345678, '#,#', 'en-US') 'US English',
  FORMAT(12345678, '#,#', 'fr-FR') 'French',
  FORMAT(12345678, '#,#', 'es-ES') 'Spanish';
+--------------+------------+------------+
| US English   | French     | Spanish    |
|--------------+------------+------------|
| 12,345,678   | 12 345 678 | 12.345.678 |
+--------------+------------+------------+

Примери – като спецификатор за мащабиране на числа :

SELECT 
  FORMAT(12000, '#,', 'en-US') 'R1',
  FORMAT(1234567890, '#,', 'en-US') R2,
  FORMAT(1234567890, '#,,', 'en-US') R3;
+------+---------+------+
| R1   | R2      | R3   |
|------+---------+------|
| 12   | 1234568 | 1235 |
+------+---------+------+

Примери – както и двете :

SELECT 
  FORMAT(1234567890, '#,#,', 'en-US') R1,
  FORMAT(1234567890, '#,#,,', 'en-US') R2;
+-----------+-------+
| R1        | R2    |
|-----------+-------|
| 1,234,568 | 1,235 |
+-----------+-------+
%

Процентно заместващо място . Умножава число по 100 и вмъква локализиран символ за процент в резултантния низ.

Примери :

SELECT 
  FORMAT(0.1234, '#.# %', 'en-US') R1,
  FORMAT(0.1235, '#.#%', 'zh-cn') R2,
  FORMAT(0.125, '#. %', 'en-US') R3,
  FORMAT(0.1234, '%#.00,', 'tr') R4,
  FORMAT(0.1234, '#.#%', 'it') R5;
+--------+-------+------+--------+-------+
| R1     | R2    | R3   | R4     | R5    |
|--------+-------+------+--------+-------|
| 12.3 % | 12.4% | 13 % | %12,34 | 12,3% |
+--------+-------+------+--------+-------+

Заместител на промила . Умножава число по 1000 и вмъква локализиран символ на промиле в резултантния низ.

Примери :

SELECT 
  FORMAT(0.01234, '#.# ‰', 'en-US') 'R1',
  FORMAT(0.01235, '#.# ‰', 'en-US') R2,
  FORMAT(0.0125, '#. ‰', 'en-US') R3,
  FORMAT(0.01234, '#.# ‰', 'fr-FR') R4;
+--------+--------+------+--------+
| R1     | R2     | R3   | R4     |
|--------+--------+------+--------|
| 12.3 ‰ | 12.4 ‰ | 13 ‰ | 12,3 ‰ |
+--------+--------+------+--------+

E0
E+0
E-0
e0
e+0
e-0

Експоненциална нотация . Ако е последвано от поне една нула (0 ), форматира резултата с помощта на експоненциална нотация. Случаят (E или e ) указва регистра на символа за експонента в резултантния низ. Броят нули след E или e символът определя минималния брой цифри в степента. Знак плюс (+ ) показва, че знакът винаги предхожда експонентата. Знак минус (- ) показва, че знакът предхожда само отрицателните експоненти.

Примери :

SELECT 
  FORMAT(123456789, '0e0') R1,
  FORMAT(123456789, '0e+0') R2,
  FORMAT(123456789, '0E+00') R3,
  FORMAT(1234.56789, '0.0##e+00') R4,
  FORMAT(12.3456789-12, '0e-0') R5;
+------+------+-------+-----------+------+
| R1   | R2   | R3    | R4        | R5   |
|------+------+-------+-----------+------|
| 1e8  | 1e+8 | 1E+08 | 1.235e+03 | 3e-1 |
+------+------+-------+-----------+------+

\

Изходен знак . Причинява следващият знак да се интерпретира като литерал, а не като спецификатор на персонализиран формат.

Пример :

SELECT FORMAT(123, '\#0000') Result;
+----------+
| Result   |
|----------|
| #0123    |
+----------+

'string'
"string"

Литерален разделител на низ . Указва, че затворените символи трябва да бъдат копирани в резултантния низ без промяна.

Пример :

SELECT FORMAT(23, '## Degrees') Result;
+------------+
| Result     |
|------------|
| 23 Degrees |
+------------+

;

Разделител на секции . Това е спецификатор на условен формат, който дефинира секции с отделни форматни низове за положителни, отрицателни и нулеви числа. Това ви позволява да приложите различно форматиране към число в зависимост от това дали стойността му е положителна, отрицателна или нула. Низът за персонализиран формат може да съдържа до три секции, разделени с точка и запетая.

  • Една секция :Форматният низ се прилага за всички стойности (точно както в предишните примери).
  • Две секции :Първият раздел се прилага за положителни стойности и нули, а вторият раздел се прилага за отрицателни стойности.

    Ако числото, което трябва да се форматира, е отрицателно, но става нула след закръгляване според формата във втория раздел, получената нула се форматира според първия раздел.

  • Три раздела :Първият раздел се прилага за положителни стойности, вторият раздел се прилага за отрицателни стойности, а третият раздел се прилага за нули.

    Вторият раздел може да бъде оставен празен (като няма нищо между точката и запетаята), в който случай първата секция се прилага за всички ненулеви стойности.

    Ако числото, което трябва да се форматира, е различно от нула, но става нула след закръгляване според формата в първия или втория раздел, получената нула се форматира според третия раздел.

Имайте предвид, че отрицателните стойности винаги се показват без знак минус, когато се използват разделители на секции. Ако искате крайната форматирана стойност да има знак минус, ще трябва изрично да включите знака минус като част от низа за персонализиран формат. Това важи и за всяко друго съществуващо форматиране, свързано с число.

Пример – Един раздел (без разделители на секции)
Това е типичен форматен низ, състоящ се от една секция (точно както в предишните примери). Следователно не се използват разделители.

SELECT 
  FORMAT(123, '0 (Number)') Positive,
  FORMAT(-123, '0 (Number)') Negative,
  FORMAT(0, '0 (Number)') Zero;
+--------------+---------------+------------+
| Positive     | Negative      | Zero       |
|--------------+---------------+------------|
| 123 (Number) | -123 (Number) | 0 (Number) |
+--------------+---------------+------------+

Имайте предвид, че знакът минус остава непокътнат, защото не използвах никакви разделители на секции.

Примери – две секции :

/* EXAMPLE 1 - Same format string, different values */
SELECT 
  FORMAT(123,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-123, '0 (Positive or Zero); 0 (Negative)') Negative,
  FORMAT(0,    '0 (Positive or Zero); 0 (Negative)') Zero;
+------------------------+-----------------+----------------------+
| Positive               | Negative        | Zero                 |
|------------------------+-----------------+----------------------|
| 123 (Positive or Zero) |  123 (Negative) | 0 (Positive or Zero) |
+------------------------+-----------------+----------------------+

/* EXAMPLE 2 - Rounding. 
Negative values rounded to zero get 
formatted under the first format string. 
*/
SELECT 
  FORMAT(0.1,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-0.1, '0 (Positive or Zero); 0 (Negative)') Negative;
+----------------------+----------------------+
| Positive             | Negative             |
|----------------------+----------------------|
| 0 (Positive or Zero) | 0 (Positive or Zero) |
+----------------------+----------------------+

Примери – три раздела :

/* EXAMPLE 1 - Basic Usage */
SELECT FORMAT(123, '0 (Positive); 0 (Negative); 0 (Zero)') Result;
+----------------+
| Result         |
|----------------|
| 123 (Positive) |
+----------------+

/* EXAMPLE 2 - Same format string, different values */
SELECT 
  FORMAT(123,   '0 (Positive); 0 (Negative); 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive); 0 (Negative); 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive); 0 (Negative); 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive); 0 (Negative); 0 (Zero)') 'Rounded to Zero';

+----------------+----------------+-----------+-------------------+
| Positive       | Negative       | Zero      | Rounded to Zero   |
|----------------+----------------+-----------+-------------------|
| 123 (Positive) | 123 (Negative) |  0 (Zero) |  0 (Zero)         |
+----------------+----------------+-----------+-------------------+

/* EXAMPLE 3 - Second format string is empty */
SELECT 
  FORMAT(123,   '0 (Positive);; 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive);; 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive);; 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive);; 0 (Zero)') 'Rounded to Zero';
+----------------+-----------------+-----------+-------------------+
| Positive       | Negative        | Zero      | Rounded to Zero   |
|----------------+-----------------+-----------+-------------------|
| 123 (Positive) | -123 (Positive) |  0 (Zero) |  0 (Zero)         |
+----------------+-----------------+-----------+-------------------+
Други

Всички други знаци. Знакът се копира в резултантния низ непроменен.

Пример :

SELECT FORMAT(12, '# °C') Result;
+----------+
| Result   |
|----------|
| 12 °C    |
+----------+

Горният списък е пълен списък с валидни низове за персонализиран формат на .NET, базиран на информацията от официалната .NET документация за низове с персонализиран формат на уебсайта на Microsoft към момента на писане.

Причината, поради която те са свързани с SQL Server FORMAT() функцията е, че приема само валидни низове във формат .NET Framework.

В допълнение към горните персонализирани формат низове, можете също да използвате стандартен форматни низове. Ето пълен списък със стандартни низове с цифров формат, които можете да използвате със SQL Server.

Можете също да форматирате стойности за дата и час. Вижте списъка със стандартни низове за формат на дата и час, както и низовете за персонализиран формат на дата и час, които можете да използвате с FORMAT() функция.

Ако все още се опитвате да разберете какво дори е форматен низ, вижте Какво е форматен низ в SQL Server? за основно разбиране на форматните низове и как те се отнасят до 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 4104:Идентификаторът от няколко части не може да бъде обвързан.

  2. Представяме ви нова функция - Spotlight Cloud Reports

  3. Какво представлява типът данни SYSNAME в SQL Server?

  4. Извличане на дефиниция на колона за набор от резултати от запомнени процедури

  5. Как да проверите кои брави се държат на маса