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

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

Тази статия предоставя справка за стандартните спецификатори на цифров формат, които могат да се използват при форматиране на числа с помощта на 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 документация за обяснение как типът на числото може да повлияе на точността. Може да се наложи да направите препратка към това с официалната документация за FORMAT() за да видите как всеки .NET числов тип се преобразува в T-SQL числов тип.

Примери :

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 само тип. Препоръчва се Двойно типове използват G17 , и Единичен типове използват G9 .

Какво означава това за SQL Server? По принцип вероятно трябва да избягвате този спецификатор на формат в SQL Server. Вместо това използвайте G17 за поплавъка тип данни и G9 за ренас тип данни.

Примери
Ето пример, който сравнява R спецификатор на формат с G17 и G9 .

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

Шестнадесетичен . Преобразува числото в низ от шестнадесетични цифри.

Използваният случай (т.е. X или x ) указва дали да се използват главни или малки букви за шестнадесетични цифри, по-големи от 9. Това е така, защото шестнадесетични стойности могат да се състоят от следните знаци; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e и f (и двата случая). Главни и малки букви представляват една и съща стойност, когато се използва шестнадесетичен (напр. f и F и двете се преобразуват в 15 в десетичен знак).

Този спецификатор на формат се поддържа само за интегрални типове.

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

Примери :

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() функция.


  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

  2. Как да филтрирате редове с нулеви стойности в изявление за избор в SQL Server - SQL Server / TSQL урок, част 110

  3. Проактивни проверки на състоянието на SQL Server, част 5:Статистика за изчакване

  4. pyodbc.connect() работи, но не и sqlalchemy.create_engine().connect()

  5. Редки колони в SQL Server:Въздействие върху времето и пространството