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

Какво е форматен низ в SQL Server?

В SQL Server, FORMAT() функцията ви позволява да форматирате стойности за дата/час и число като форматиран низ, като подадете „форматиран низ“ като втори аргумент (първият аргумент е стойността, която се форматира).

Ето пример за тази функция в действие:

FORMAT(@date, 'dd/MM/yyyy');

В този случай низът за формат е дд/ММ/гггг .

Този конкретен форматен низ указва, че @date Стойността трябва да бъде форматирана с двуцифрен ден, двуцифрен месец и четирицифрена година в този ред и с наклонени черти като разделители.

Това ще доведе до нещо подобно:

21/05/2019

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

SQL Server приема само форматни низове, които се поддържат от .NET Framework.

Низът за форматиране може да бъде низ за стандартен формат или низ за персонализиран формат. Ето как работят те:

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

Пример 1 – Низ за стандартен формат

Ето пример, за да демонстрирате как работят низовете за стандартен формат.

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

Резултат:

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

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

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

Пример 2 – Низ за персонализиран формат

Този пример произвежда същия изход като предишния пример. Разликата е, че в този пример използвам по избор форматен низ вместо стандартен.

SELECT FORMAT(1234, '$#,###.00') AS Result;

Резултат:

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

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

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

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

Включвам и $ , , и . литерални низове във форматния низ. Те са включени в изхода точно такива, каквито са.

Ако намалим входното число, можем да видим как резултатът е различен между 0 и # спецификатори на формат и как те се сравняват с C спецификатор на стандартен формат от предишния пример:

SELECT 
  FORMAT(34, 'C') AS 'C',
  FORMAT(34, '$0,000.00') AS '0',
  FORMAT(34, '$#,###.00') AS '#';

Резултат:

+--------+-----------+--------+
| C      | 0         | #      |
|--------+-----------+--------|
| $34.00 | $0,034.00 | $34.00 |
+--------+-----------+--------+

Както може да си представите, низовете за персонализиран формат осигуряват много по-голяма гъвкавост в сравнение със стандартните форматни низове.

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

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

Стойностите за дата/час също предлагат избор на низове за стандартен или персонализиран формат. Ето пример за стойност на дата/час, която се форматира със стандартен форматен низ, както и някои персонализирани низове за формат.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd') AS 'd',
  FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy',
  FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy',
  FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy',
  FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';

Резултат:

+----------+------------+------------+-------------------+------------------------+
| d        | M/d/yyyy   | dd/MM/yy   | ddd, MMM dd, yy   | dddd, dd MMMM yyyy     |
|----------+------------+------------+-------------------+------------------------|
| 5/1/2080 | 5/1/2080   | 01/05/80   | Wed, May 01, 80   | Wednesday, 01 May 2080 |
+----------+------------+------------+-------------------+------------------------+

Първият използва низ от стандартен формат, а останалите четири използват низове за персонализиран формат.

За пълен списък с налични низове за формат на дата и час вижте следното:

  • Списък със стандартните низове за формат на дата/час
  • Списък с персонализираните низове за формат на дата/час

Пример 4 – Култура

Резултатите от форматните низове понякога могат да зависят от използваната култура. Например, в САЩ краткият формат на датата е представен като „М/д/гггг“, но във Великобритания е представен като „дд/мм/гггг“.

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

Синтаксисът на функцията е така:

FORMAT ( value, format [, culture ] )

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

Ето пример за това, къде различните култури могат да доведат до един форматен низ, произвеждащ множество различни формати.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd', 'en-us') AS 'US English',
  FORMAT(@date, 'd', 'en-gb') AS 'British',
  FORMAT(@date, 'd', 'de-de') AS 'German',
  FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';

Резултат:

+--------------+------------+------------+------------+
| US English   | British    | German     | Japanese   |
|--------------+------------+------------+------------|
| 5/1/2080     | 01/05/2080 | 01.05.2080 | 05/01/2080 |
+--------------+------------+------------+------------+

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

И това не е просто стандартно форматни низове, които са повлияни от културата. Културата също може да повлияе на резултата от персонализиране форматни низове. Ето един пример:

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English',
  FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German',
  FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese',
  FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';

Резултат:

+-------------------+------------------+----------------------+----------------+
| US English        | German           | Vietnamese           | Swedish        |
|-------------------+------------------+----------------------+----------------|
| Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj |
+-------------------+------------------+----------------------+----------------+

Имате и опцията да използвате инвариантната култура (iv ). Инвариантната култура е културно-нечувствителна. Той е свързан с английския език, но не и с която и да е държава/регион. За повече информация и примери вижте Как да посочите инвариантната култура при използване на FORMAT() в SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. присъединете колона с данни, разделени със запетая

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

  3. Съединяване на три маси със съединения, различни от INNER JOIN

  4. Как мога да включа нулеви стойности в MIN или MAX?

  5. Нови промени в колони само за метаданни в SQL Server 2016