sql >> Databáze >  >> RDS >> Sqlserver

Co je formátovací řetězec na serveru SQL?

V SQL Server, FORMAT() Funkce umožňuje formátovat hodnoty data/času a čísel jako formátovaný řetězec předáním „formátovacího řetězce“ jako druhého argumentu (první argument je formátovaná hodnota).

Zde je příklad této funkce v akci:

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

V tomto případě je formátovací řetězec dd/MM/rrrr .

Tento konkrétní formátovací řetězec určuje, že @date hodnota by měla být formátována dvoumístným dnem, dvoumístným měsícem a čtyřmístným rokem v tomto pořadí as lomítky jako oddělovači.

Výsledkem by bylo něco takového:

21/05/2019

formátový řetězec je řetězec, který obsahuje jeden nebo více předdefinovaných specifikátorů formátu , což jsou jednotlivé znaky nebo skupiny znaků, které definují, jak má být výstup formátován.

SQL Server přijímá pouze formátovací řetězce, které jsou podporovány rozhraním .NET Framework.

Formátovací řetězec může být standardní formátovací řetězec nebo vlastní formátovací řetězec. Zde je návod, jak to funguje:

  • Standardní formátovací řetězec je předdefinovaný formátovací řetězec. Obsahuje jeden specifikátor formátu, který je interpretován jako reprezentující určitý, předem definovaný formát. Standardní formátovací řetězce jsou ve skutečnosti aliasy pro vlastní formátovací řetězce. Skutečný použitý řetězec vlastního formátu však často závisí na kultuře.
  • řetězec vlastního formátu na druhé straně se skládá z jednoho nebo více vlastních specifikátorů formátu, které ve vzájemné kombinaci definují formát. To vám umožňuje mnohem větší flexibilitu při definování toho, jak by měl výstup vypadat.

Příklad 1 – Řetězec standardního formátu

Zde je příklad demonstrující, jak fungují standardní formátovací řetězce.

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

Výsledek:

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

V tomto příkladu C je formátovací řetězec. V tomto případě se jedná o standardní číselný formátový řetězec skládající se z jediného specifikátoru formátu. Tento konkrétní specifikátor formátu se používá k vyjádření částky měny.

Stejného výsledku bychom mohli dosáhnout také použitím vlastního číselného formátovacího řetězce.

Příklad 2 – Řetězec vlastního formátu

Tento příklad vytváří stejný výstup jako předchozí příklad. Rozdíl je v tom, že v tomto příkladu používám vlastní formátovací řetězec namísto standardního.

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

Výsledek:

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

řetězec vlastního formátu umožňuje vytvořit si svůj vlastní formát. Můžete kombinovat řetězce se specifikátory formátu a vytvořit si vlastní formát.

V tomto příkladu používám # specifikátor formátu, což je zástupný znak pro číslici. Pokud číslice není přítomna, ve výsledném řetězci se neobjeví žádná číslice.

Také používám 0 specifikátor formátu, který je také zástupným symbolem pro jakoukoli číslici. Ale v tomto případě, pokud číslice není přítomna, použije se místo ní nula.

Zahrnuji také $ , , a . doslovné řetězce ve formátovacím řetězci. Ty jsou zahrnuty do výstupu přesně tak, jak jsou.

Pokud snížíme vstupní číslo, můžeme vidět, jak se výsledek liší mezi 0 a # specifikátory formátu a jejich srovnání s C standardní specifikátor formátu z předchozího příkladu:

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

Výsledek:

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

Jak si můžete představit, vlastní formátovací řetězce poskytují mnohem větší flexibilitu než standardní formátovací řetězce.

Existuje však mnoho scénářů, kdy standardní formátovací řetězce mohou být výkonnější, zejména pokud jde o vytváření dynamických výsledků, které berou v úvahu kulturu. Více o kultuře již brzy.

Příklad 3 – Formátování data a času

Hodnoty data/času také nabízejí výběr standardních nebo vlastních formátovacích řetězců. Zde je příklad hodnoty data/času formátované pomocí standardního formátovacího řetězce a také některých vlastních formátovacích řetězců.

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';

Výsledek:

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

První z nich používá standardní formátovací řetězec a další čtyři používají vlastní formátovací řetězce.

Úplný seznam dostupných řetězců formátu data a času naleznete v následujícím textu:

  • Seznam standardních řetězců formátu data/času
  • Seznam vlastních řetězců formátu data/času

Příklad 4 – Kultura

Výsledky formátovacích řetězců mohou někdy záviset na použité kultuře. Například v USA je formát krátkého data reprezentován jako „M/d/rrrr“, ale v Británii je reprezentován jako „dd/MM/yyyy“.

Ve výchozím nastavení se k definování kultury používá jazyk aktuální relace. Nicméně FORMAT() Tato funkce vám umožňuje toto přepsat.

Syntaxe funkce vypadá takto:

FORMAT ( value, format [, culture ] )

Umožňuje vám tedy specifikovat kulturu jako volitelný argument.

Zde je příklad toho, kdy různé kultury mohou vyústit v jeden formátovací řetězec produkující řadu různých formátů.

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';

Výsledek:

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

V tomto případě všechny čtyři země používají d standardní řetězec formátu data a času. Všichni však používají jiný kulturní argument. To vytváří jiný výsledek, který vyhovuje každé kultuře.

A není to jen standardní formátovací řetězce, které jsou ovlivněny kulturou. Kultura může také ovlivnit výsledek vlastního formátovací řetězce. Zde je příklad:

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';

Výsledek:

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

Máte také možnost použít invariantní kulturu (iv ). Invariantní kultura je kulturně necitlivá. Je spojena s angličtinou, ale ne s žádnou zemí/oblastí. Další informace a příklady naleznete v tématu Jak určit invariantní kulturu při použití FORMAT() na serveru SQL Server.


  1. Jak zahrnout nula / 0 výsledků do souhrnu COUNT?

  2. Průvodce nasazením TimescaleDB s Dockerem

  3. Definice schémat pomocí DBMS

  4. Seskupování klauzulí WHERE v Codeigniter