Тази статия предоставя справка за персонализираните спецификатори на числов формат, които могат да се използват при форматиране на числа с помощта на 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 | +------+-------+------+-------+ |
, | Разделител на групи и мащабиране на числа . Може да се използва както като разделител на групи (известен също като разделител на хиляда), така и като спецификатор за мащабиране на числа.
За да посочите разделител на група, поставете една или повече запетаи между двуцифрени заместители (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 ‰ | +--------+--------+------+--------+ |
|
Експоненциална нотация . Ако е последвано от поне една нула ( Примери : 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 | +----------+ |
| Литерален разделител на низ . Указва, че затворените символи трябва да бъдат копирани в резултантния низ без промяна. Пример : 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()
функция.