Тази статия предоставя справка за стандартните спецификатори на цифров формат, които могат да се използват при форматиране на числа с помощта на FORMAT()
функция в SQL Server. Включени примери.
Някои от примерите използват прецизни спецификатори (те се състоят от една или две цифри, добавени към спецификатора на формата). Спецификаторите за точност могат да бъдат стойности от 0 до 99, което определя точността на резултата. Как работи зависи от използвания спецификатор на формат. За някои спецификатори на формат той ще посочи общия брой цифри в резултата, за други ще посочи броя на десетичните знаци. В други случаи той ще бъде игнориран напълно.
Форматиране на низ | Описание/Пример |
---|---|
C или c | Валута . Преобразува числото в низ, който представлява сума във валута. Може да се използва незадължителен спецификатор на точност, за да се посочи броят на десетичните знаци. Примери (с помощта на различни култури) : SELECT FORMAT(12.34, 'C', 'en-us') R1, FORMAT(012.34, 'C', 'iv') R2, FORMAT(12.34, 'C0', 'ja-jp') R3, FORMAT(12.54, 'c', 'vi-vn') R4, FORMAT(12.54, 'c0', 'en-au') R5, FORMAT(12.54, 'c4', 'en-gb') R6; +--------+--------+------+---------+------+----------+ | R1 | R2 | R3 | R4 | R5 | R6 | |--------+--------+------+---------+------+----------| | $12.34 | ¤12.34 | ¥12 | 12,54 ₫ | $13 | £12.5400 | +--------+--------+------+---------+------+----------+ |
D или d | Десетичен знак . Преобразува числото в низ от десетични цифри (0-9), с префикс със знак минус, ако числото е отрицателно. Този формат се поддържа само за интегрални типове. Ако се използва (по избор) спецификатор за точност, той посочва общия брой цифри в резултата. Ако числото няма толкова много цифри, то ще бъде допълнено с нули отляво. Примери : SELECT FORMAT(123, 'D') R1, FORMAT(123, 'D0') R2, FORMAT(123, 'D3') R3, FORMAT(123, 'd4') R4, FORMAT(0123, 'd5') R5, FORMAT(1.23, 'd') R6; +------+------+------+------+-------+------+ | R1 | R2 | R3 | R4 | R5 | R6 | |------+------+------+------+-------+------| | 123 | 123 | 123 | 0123 | 00123 | NULL | +------+------+------+------+-------+------+ |
E или e | Експоненциален (научен) . Преобразува числото в низ от формата „-d.ddd…E+ddd“ или „-d.ddd…e+ddd“, където всяко „d“ означава цифра (0-9). Низът започва със знак минус, ако числото е отрицателно. Точно една цифра винаги предхожда десетичната запетая. Ако се използва прецизен спецификатор, той указва колко цифри са вдясно от десетичната запетая. Ако се пропусне, шест цифри ще се появят вдясно от десетичната запетая. Примери : SELECT FORMAT(1024.1234567, 'E') R1, FORMAT(1024.1234567, 'E0') R2, FORMAT(1024.1234567, 'E3') R3, FORMAT(1024.1234567, 'e4') R4, FORMAT(1024.1234567, 'e7') R5; +---------------+--------+------------+-------------+----------------+ | R1 | R2 | R3 | R4 | R5 | |---------------+--------+------------+-------------+----------------| | 1.024123E+003 | 1E+003 | 1.024E+003 | 1.0241e+003 | 1.0241235e+003 | +---------------+--------+------------+-------------+----------------+ |
F или f | Фиксирана точка . Преобразува числото в низ от формата „-ddd.ddd…“, където всяко „d“ означава цифра (0-9). Низът започва със знак минус, ако числото е отрицателно. Може да се използва незадължителен спецификатор на точност, за да се посочи броят на десетичните знаци. Примери : SELECT FORMAT(12.345, 'F', 'en-us') R1, FORMAT(12.345, 'F0', 'en-us') R2, FORMAT(12.345, 'f3', 'en-us') R3, FORMAT(12.345, 'f4', 'en-us') R4, FORMAT(12.345, 'f5', 'en-us') R5, FORMAT(12.345, 'f', 'vi-vn') R6; +-------+------+--------+---------+----------+-------+ | R1 | R2 | R3 | R4 | R5 | R6 | |-------+------+--------+---------+----------+-------| | 12.35 | 12 | 12.345 | 12.3450 | 12.34500 | 12,35 | +-------+------+--------+---------+----------+-------+ |
G или g | Общи . Преобразува числото в по-компактно от фиксирана точка или научна нотация, в зависимост от типа на числото и дали е налице спецификатор за точност. Ако се използва (незадължителен) спецификатор на точност, той дефинира максималния брой значими цифри, които могат да се появят в резултантния низ. Ако се пропусне или ако стойността е нула, точността се определя от типа число.
Вижте официалната .NET документация за обяснение как типът на числото може да повлияе на точността. Може да се наложи да направите препратка към това с официалната документация за Примери : SELECT FORMAT(12.345, 'G', 'en-us') R1, FORMAT(12.345, 'G0', 'en-us') R2, FORMAT(12.345, 'g3', 'en-us') R3, FORMAT(12.345, 'g4', 'en-us') R4, FORMAT(12.345, 'g5', 'en-us') R5, FORMAT(12.345, 'g', 'vi-vn') R6; +--------+--------+------+-------+--------+--------+ | R1 | R2 | R3 | R4 | R5 | R6 | |--------+--------+------+-------+--------+--------| | 12.345 | 12.345 | 12.3 | 12.35 | 12.345 | 12,345 | +--------+--------+------+-------+--------+--------+ |
N или n | Номер . Преобразува числото в низ от формата „-d,ddd,ddd.ddd…“. Ако се използва (по избор) спецификатор за точност, той определя броя на цифрите вдясно от десетичната запетая. Примери : SELECT FORMAT(1234.56, 'N', 'en-us') R1, FORMAT(1234.56, 'N0', 'en-us') R2, FORMAT(1234.56, 'n3', 'en-us') R3, FORMAT(1234.56, 'n4', 'en-us') R4, FORMAT(1234.56, 'n', 'vi-vn') R5; +----------+-------+-----------+------------+----------+ | R1 | R2 | R3 | R4 | R5 | |----------+-------+-----------+------------+----------| | 1,234.56 | 1,235 | 1,234.560 | 1,234.5600 | 1.234,56 | +----------+-------+-----------+------------+----------+ |
P или p | Процент . Умножава числото по 100 и го преобразува в низ, който представлява процент. Ако се използва спецификаторът за точност, той определя броя на десетичните знаци. Примери : SELECT FORMAT(.1234, 'P', 'en-us') R1, FORMAT(.1234, 'P0', 'en-us') R2, FORMAT(.1250, 'p0', 'en-us') R3, FORMAT(.1250, 'p3', 'en-us') R4, FORMAT(.1250, 'p', 'vi-vn') R5; +---------+------+------+----------+--------+ | R1 | R2 | R3 | R4 | R5 | |---------+------+------+----------+--------| | 12.34 % | 12 % | 13 % | 12.500 % | 12,50% | +---------+------+------+----------+--------+ |
R или r | Двупосочен . Опитва се да се гарантира, че числова стойност, която се преобразува в низ, се анализира обратно в същата числова стойност. Спецификаторът за точност се игнорира, когато се използва този спецификатор на формат. ЗАБЕЛЕЖКА :В .NET този спецификатор на формат се поддържа само от Single , Двойно , и BigInteger видове числа. Също така за Двойни стойности, този спецификатор на формат в някои случаи не успява да прехвърли успешно оригиналната стойност. Освен това предлага лоша производителност, когато се използва с Double и Самични видове.
Освен това, документацията на .NET препоръчва този спецификатор на формат да се използва за BigInteger само тип. Препоръчва се Двойно типове използват
Какво означава това за SQL Server? По принцип вероятно трябва да избягвате този спецификатор на формат в SQL Server. Вместо това използвайте
Примери DECLARE @myFloat float, @myReal real; SET @myFloat = '123456789.1234567'; SET @myReal = @myFloat; SELECT @myFloat 'Float Value', @myReal 'Real Value'; SELECT FORMAT(@myFloat, 'R') 'Float R', FORMAT(@myFloat, 'G17') 'Float G17', FORMAT(@myReal, 'R') 'Real R', FORMAT(@myReal, 'G9') 'Real G9'; +------------------+--------------+ | Float Value | Real Value | |------------------+--------------| | 123456789.123457 | 1.234568E+08 | +------------------+--------------+ (1 row affected) +-------------------+-------------------+-----------+-----------+ | Float R | Float G17 | Real R | Real G9 | |-------------------+-------------------+-----------+-----------| | 123456789.1234567 | 123456789.1234567 | 123456792 | 123456792 | +-------------------+-------------------+-----------+-----------+ (1 row affected) |
X или x | Шестнадесетичен . Преобразува числото в низ от шестнадесетични цифри.
Използваният случай (т.е. Този спецификатор на формат се поддържа само за интегрални типове. Ако се използва (по избор) спецификатор за точност, той посочва общия брой цифри в резултата. Ако числото няма толкова много цифри, то ще бъде допълнено с нули отляво. Примери : SELECT FORMAT(123, 'X') R1, FORMAT(123, 'x') R2, FORMAT(123, 'x6') R3, FORMAT(12345678, 'x') R4, FORMAT(123, 'x6') R5, FORMAT(-123, 'x') R6, FORMAT(1.23, 'X') R7; +------+------+--------+--------+--------+----------+------+ | R1 | R2 | R3 | R4 | R5 | R6 | R7 | |------+------+--------+--------+--------+----------+------| | 7B | 7b | 00007b | bc614e | 00007b | ffffff85 | NULL | +------+------+--------+--------+--------+----------+------+ |
Горният списък е пълен списък на валидни низове с персонализиран цифров формат на .NET, базиран на информацията от официалната документация на .NET за низове със стандартен цифров формат на уебсайта на Microsoft към момента на писане.
Причината, поради която те са свързани с SQL Server FORMAT()
функция е, че тази функция приема само валидни низове във формат .NET Framework.
В допълнение към горния стандарт формат низове, можете също да използвате по избор форматни низове. Ето пълен списък с низове с персонализиран цифров формат, които можете да използвате със SQL Server.
Можете също да форматирате стойности за дата и час. Вижте списъка със стандартни низове за формат на дата и час, както и низовете за персонализиран формат за дата и час, които можете да използвате с FORMAT()
функция.
Ако все още се опитвате да разберете какво дори е форматиращ низ, вижте Какво е форматен низ в SQL Server? за основно разбиране на форматните низове и как те се отнасят до FORMAT()
функция.