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

Как работи функцията FORMAT() в SQL Server (T-SQL)

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

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

Синтаксис

Синтаксисът е така:

FORMAT ( value, format [, culture ] )

Където value е стойността, която искате да форматирате, и format е валиден форматен низ, който посочва желания формат.

Незадължителната culture аргумент може да се използва за определяне на култура. Ако е пропуснато, се използва езикът на текущата сесия.

FORMAT функцията е недетерминистична.

Пример 1 – Форматиране на число

Ето пример за форматиране на число:

SELECT FORMAT(1, 'N') AS Result;

Резултат:

+----------+
| Result   |
|----------|
| 1.00     |
+----------+

В този случай използвах N като форматен низ. Това е стандартен спецификатор на числов формат за извеждане на стойността като число. Този конкретен спецификатор на формат води до форматиране на изхода с интегрални и десетични цифри, групови разделители и десетичен разделител с незадължителен отрицателен знак. Този спецификатор на формат не е чувствителен към малки и големи букви, така че или N или n е добре.

Пример 2 – Форматиране във валута

Ето пример за форматиране на число като валута:

SELECT FORMAT(1, 'C') AS Result;

Резултат:

+----------+
| Result   |
|----------|
| $1.00    |
+----------+

Още числови формати

Има много повече форматни низове, които могат да се използват с FORMAT() функция. Например има форматни низове за проценти, фиксирани точки, експоненциални (научни), шестнадесетични и др.

Низовете с цифров формат са разделени на стандартни и персонализирани.

Следните две статии изброяват всички низове с цифров формат, включително примери:

  • Стандартни низове в цифров формат
  • Стрингове с персонализиран цифров формат

Вижте също Как да форматирате числа в SQL Server за повече примери за форматиране на числа.

Пример 3 – Форматиране на дата

Ето пример за форматиране на дата:

SELECT 
  GETDATE() AS 'Unformatted Date',
  FORMAT( GETDATE(), 'D') AS 'Formatted Date';

Резултат:

+-------------------------+------------------------+
| Unformatted Date        | Formatted Date         |
|-------------------------+------------------------|
| 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 |
+-------------------------+------------------------+

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

Още формати за дата

Има много повече форматни низове, които могат да се използват за форматиране на дати. Както при низовете с числов формат, низовете за формат на дата и час са разделени на стандартен и персонализиран, така че можете да създадете свои собствени персонализирани формати или можете да разчитате на стандартен.

Следните две статии изброяват всички низове за формат на дата и час, включително примери:

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

Вижте също как да форматирате датата и часа в SQL Server за повече примери.

Пример 4 – Незадължителната culture Аргумент

Ето пример за използване на culture аргумент за връщане на стойност в различни валути:

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      |
+----------+------------+---------+

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

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

За повече примери вижте Как езиковите настройки могат да повлияят на вашия FORMAT() Резултати.

Пример 5 – Невалидна culture Аргумент

Ако предоставите невалидна култура, ще получите грешка:

SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';

Резултат:

The culture parameter 'oop-SS!' provided in the function call is not supported.

Пример 6 – Невалидна стойност на формата

Въпреки това, за други грешки, функцията връща NULL . Например, ето какво се случва, ако предоставя невалидна стойност за форматиране:

SELECT FORMAT(GETDATE(), 'C') AS 'Result';

Резултат:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

В този случай се опитвах да форматирам дата във валута и следователно резултатът беше NULL .

Валидни типове данни

FORMAT() разчита на наличието на .NET Framework Common Language Runtime (CLR) и използва правилата за форматиране на CLR.

Следните типове данни могат да бъдат форматирани с FORMAT() функция. Този списък съдържа приемливите типове данни за входния низ заедно с техните еквивалентни типове за съпоставяне на .NET Framework.

Категория Тип .NET тип
Числово голям Int64
Числови int Int32
Числови smallint Int16
Числови tinyint Байт
Числови десетичен знак SqlDecimal
Числови числова SqlDecimal
Числови float Двойно
Числови истински Самичен
Числови малки пари Десетичен знак
Числови пари Десетичен знак
Дата и час дата Дата и час
Дата и час време TimeSpan
Дата и час дата и час Дата и час
Дата и час smalldatetime Дата и час
Дата и час дата и час2 Дата и час
Дата и час отместване на датата и времето DateTimeOffset

Екраниране на двоеточия и точки за типа данни „време“

Когато използвате FORMAT , двоеточия и точки трябва да бъдат екранирани (това се придържа към правилата за форматиране на CLR). Следователно, когато форматиращият низ (втори параметър) съдържа двоеточие или точка, двоеточието или точката трябва да се екранират с обратна наклонена черта, когато входната стойност (първи параметър) е от време тип данни.

Пример:

SELECT 
  CAST('12:15' AS time) AS 'Unformatted Data',
  FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped',
  FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';

Резултат:

+--------------------+-------------+-----------+
| Unformatted Data   | Unescaped   | Escaped   |
|--------------------+-------------+-----------|
| 12:15:00           | NULL        | 12.15     |
+--------------------+-------------+-----------+

Така, както се очакваше, неекранираният низ връща NULL .

Както бе споменато, това се отнася само за времета тип данни. Ако променим входната стойност на различен тип данни, не е необходимо да я избягваме:

SELECT 
  CAST('12:15' AS datetime) AS 'Unformatted Data',
  FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped',
  FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';

Резултат:

+-------------------------+-------------+-----------+
| Unformatted Data        | Unescaped   | Escaped   |
|-------------------------+-------------+-----------|
| 1900-01-01 12:15:00.000 | 12.15       | 12.15     |
+-------------------------+-------------+-----------+

В този случай входната стойност е datetime , и следователно резултатът е добър, без да го избягвате.

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

В персонализиран низ за формат на дата и час, d , f , F , g , h , H , K , m , M , s , t , y , z , : , или / знаците се интерпретират като спецификатори на персонализиран формат, а не като буквални знаци.

В низ с персонализиран цифров формат, # , 0 , . , , , % и символите се интерпретират като спецификатори на формат, а не като буквални знаци. Главните и малките букви E както и + и - символите могат също да се тълкуват като спецификатори на формат, в зависимост от тяхната позиция във форматиращия низ.

Ако трябва да включите обратна наклонена черта в резултантния низ, екранирайте я с друга обратна наклонена черта.

Отдалечено

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

Кога да използвате FORMAT() Функция

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


  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 производителност:WHERE срещу WHERE(ROW_NUMBER)

  2. Създайте публичен профил по подразбиране за поща от база данни в SQL Server (T-SQL)

  3. SQL Server, Как да задам автоматично увеличение след създаване на таблица без загуба на данни?

  4. Как мога да използвам единичен пул за връзки mssql през няколко маршрута в уеб приложение Express 4?

  5. Групиране по колона и множество редове в един ред множество колони