V SQL Server můžete použít T-SQL FORMAT()
funkce pro vrácení hodnot, jako jsou čísla a data, jako formátované řetězce.
Zadáte hodnotu, která se má formátovat, a určíte formát, který se má použít. Funkce přijímá volitelný argument, který vám umožňuje určit kulturu, která se má použít při formátování hodnoty.
Syntaxe
Syntaxe vypadá takto:
FORMAT ( value, format [, culture ] )
Kde value
je hodnota, kterou chcete formátovat, a format
je platný formátovací řetězec, který specifikuje požadovaný formát.
Volitelná culture
argument lze použít k určení kultury. Pokud je vynechán, použije se jazyk aktuální relace.
FORMAT
funkce je nedeterministická.
Příklad 1 – Formátování čísla
Zde je příklad formátování čísla:
SELECT FORMAT(1, 'N') AS Result;
Výsledek:
+----------+ | Result | |----------| | 1.00 | +----------+
V tomto případě jsem použil N
jako formátovací řetězec. Toto je standardní specifikátor číselného formátu pro výstup hodnoty jako čísla. Tento konkrétní specifikátor formátu má za následek, že výstup je formátován pomocí celočíselných a desetinných číslic, oddělovačů skupin a oddělovače desetinných míst s volitelným záporným znaménkem. Tento specifikátor formátu nerozlišuje velká a malá písmena, takže buď N
nebo n
je v pořádku.
Příklad 2 – Formát na měnu
Zde je příklad formátování čísla jako měny:
SELECT FORMAT(1, 'C') AS Result;
Výsledek:
+----------+ | Result | |----------| | $1.00 | +----------+
Další číselné formáty
Existuje mnoho dalších formátovacích řetězců, které lze použít s FORMAT()
funkce. Existují například formátovací řetězce pro procenta, pevnou řádovou čárku, exponenciální (vědecké), šestnáctkové a další.
Řetězce číselného formátu jsou rozděleny na standardní a vlastní.
Následující dva články obsahují seznam všech řetězců číselného formátu včetně příkladů:
- Standardní řetězce číselného formátu
- Řetězce vlastního číselného formátu
Další příklady formátování čísel naleznete také v části Jak formátovat čísla na serveru SQL.
Příklad 3 – Formátování data
Zde je příklad formátování data:
SELECT GETDATE() AS 'Unformatted Date', FORMAT( GETDATE(), 'D') AS 'Formatted Date';
Výsledek:
+-------------------------+------------------------+ | Unformatted Date | Formatted Date | |-------------------------+------------------------| | 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 | +-------------------------+------------------------+
V tomto případě jsem použil D
který určuje vzor dlouhého data.
Další formáty data
Existuje mnoho dalších formátovacích řetězců, které lze použít pro formátování dat. Stejně jako u řetězců číselného formátu jsou řetězce formátu data a času rozděleny na standardní a vlastní, takže si můžete vytvořit vlastní vlastní formáty, nebo se můžete spolehnout na standardní.
V následujících dvou článcích jsou uvedeny všechny řetězce formátu data a času, včetně příkladů:
- Standardní řetězce formátu data a času
- Vlastní řetězce formátu data a času
Další příklady naleznete také v části Jak formátovat datum a čas na serveru SQL.
Příklad 4 – Volitelná culture
Argument
Zde je příklad použití culture
argument pro vrácení hodnoty v různých měnách:
SELECT FORMAT(1, 'C', 'fr-FR') AS 'France', FORMAT(1, 'C', 'th-TH') AS 'Thailand', FORMAT(1, 'C', 'ja-JP') AS 'Japan';
Výsledek:
+----------+------------+---------+ | France | Thailand | Japan | |----------+------------+---------| | 1,00 € | ฿1.00 | ¥1 | +----------+------------+---------+
FORMAT()
funkce přijímá jakoukoli kulturu podporovanou rozhraním .NET Framework jako argument; není omezena na jazyky výslovně podporované SQL Serverem.
Pokud tento argument neuvedete, použije se jazyk aktuální relace.
Další příklady najdete v tématu Jak může jazyková nastavení ovlivnit váš FORMAT()
Výsledky.
Příklad 5 – Neplatná culture
Argument
Pokud zadáte neplatnou kulturu, zobrazí se chyba:
SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';
Výsledek:
The culture parameter 'oop-SS!' provided in the function call is not supported.
Příklad 6 – Neplatná hodnota formátu
U ostatních chyb však funkce vrací NULL
. Zde je například uvedeno, co se stane, když zadám neplatnou hodnotu k formátování:
SELECT FORMAT(GETDATE(), 'C') AS 'Result';
Výsledek:
+----------+ | Result | |----------| | NULL | +----------+
V tomto případě jsem se snažil formátovat datum do měny, a proto byl výsledek NULL
.
Platné datové typy
FORMAT()
spoléhá na přítomnost .NET Framework Common Language Runtime (CLR) a používá pravidla formátování CLR.
Následující datové typy lze formátovat pomocí FORMAT()
funkce. Tento seznam obsahuje přijatelné datové typy pro vstupní řetězec spolu s jejich ekvivalentními typy mapování .NET Framework.
Kategorie | Typ | typ .NET |
---|---|---|
Číselné | bigint | Int64 |
Číselné | int | Int32 |
Číselné | smallint | Int16 |
Číselné | tinyint | Byte |
Číselné | desítkové | SqlDecimal |
Číselné | numerické | SqlDecimal |
Číselné | plovoucí | Dvojité |
Číselné | skutečný | Svobodný |
Číselné | malé peníze | Desetinné |
Číselné | peníze | Desetinné |
Datum a čas | datum | Datum a čas |
Datum a čas | čas | Časové rozpětí |
Datum a čas | datetime | Datum a čas |
Datum a čas | smalldatetime | Datum a čas |
Datum a čas | datetime2 | Datum a čas |
Datum a čas | datetimeoffset | DateTimeOffset |
Escapování dvojteček a teček pro typ dat „čas“
Při použití FORMAT
, dvojtečky a tečky musí být escapovány (toto dodržuje pravidla formátování CLR). Pokud tedy formátovací řetězec (druhý parametr) obsahuje dvojtečku nebo tečku, musí být dvojtečka nebo tečka ukončena zpětným lomítkem, pokud je vstupní hodnota (první parametr) čas datový typ.
Příklad:
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';
Výsledek:
+--------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |--------------------+-------------+-----------| | 12:15:00 | NULL | 12.15 | +--------------------+-------------+-----------+
Jak se očekávalo, neuvedený řetězec vrátí NULL
.
Jak již bylo zmíněno, platí to pouze pro čas datový typ. Pokud změníme vstupní hodnotu na jiný datový typ, nemusíme ji escapovat:
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';
Výsledek:
+-------------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |-------------------------+-------------+-----------| | 1900-01-01 12:15:00.000 | 12.15 | 12.15 | +-------------------------+-------------+-----------+
V tomto případě je vstupní hodnota datetime , a proto je výsledek v pořádku, aniž by z něj uniklo.
Zpětné lomítko můžete také použít k escapování jakéhokoli jiného znaku, který chcete zahrnout do výsledného řetězce, který by byl jinak interpretován jako specifikátor formátu. Pokud znaku předchází zpětné lomítko, znamená to, že následující znak je znakový literál, který by měl být zahrnut do výsledného řetězce beze změny.
Ve vlastním řetězci formátu data a času je d
, f
, F
, g
, h
, H
, K
, m
, M
, s
, t
, y
, z
, :
, nebo /
znaky jsou interpretovány jako vlastní specifikátory formátu spíše než jako doslovné znaky.
V řetězci vlastního číselného formátu #
, 0
, .
, ,
, %
a ‰
symboly jsou interpretovány spíše jako specifikátory formátu než jako doslovné znaky. Velká a malá písmena E
stejně jako +
a -
symboly lze také interpretovat jako specifikátory formátu v závislosti na jejich pozici ve formátovacím řetězci.
Pokud potřebujete do výsledného řetězce zahrnout zpětné lomítko, uzavřete ho jiným zpětným lomítkem.
Vzdálené ovládání
FORMAT()
funkci nelze vzdáleně ovládat, protože závisí na přítomnosti CLR. Vzdálená komunikace funkce, která vyžaduje CLR, může způsobit chybu na vzdáleném serveru.
Kdy použít FORMAT()
Funkce
Společnost Microsoft doporučuje použít FORMAT()
funkce se používá pro formátování hodnot data/času a čísel jako řetězců s ohledem na národní prostředí a pro převod obecných datových typů buď CAST()
nebo CONVERT()
místo toho by měla být použita funkce.