W SQL Server możesz użyć T-SQL FORMAT()
funkcja zwracająca wartości, takie jak liczby i daty, jako sformatowane ciągi.
Podajesz wartość do sformatowania i określasz format do użycia. Funkcja akceptuje opcjonalny argument, który pozwala określić kulturę używaną podczas formatowania wartości.
Składnia
Składnia wygląda tak:
FORMAT ( value, format [, culture ] )
Gdzie value
to wartość, którą chcesz sformatować, a format
jest prawidłowym ciągiem formatu, który określa żądany format.
Opcjonalna culture
argument może służyć do określenia kultury. W przypadku pominięcia używany jest język bieżącej sesji.
FORMAT
funkcja jest niedeterministyczna.
Przykład 1 – Formatowanie liczby
Oto przykład formatowania liczby:
SELECT FORMAT(1, 'N') AS Result;
Wynik:
+----------+ | Result | |----------| | 1.00 | +----------+
W tym przypadku użyłem N
jako ciąg formatu. Jest to standardowy specyfikator formatu liczbowego do wyprowadzania wartości jako liczby. Ten konkretny specyfikator formatu powoduje, że dane wyjściowe są formatowane za pomocą cyfr całkowitych i dziesiętnych, separatorów grup i separatora dziesiętnego z opcjonalnym znakiem ujemnym. W tym specyfikatorze formatu nie jest rozróżniana wielkość liter, więc albo N
lub n
jest w porządku.
Przykład 2 – Format do waluty
Oto przykład formatowania liczby jako waluty:
SELECT FORMAT(1, 'C') AS Result;
Wynik:
+----------+ | Result | |----------| | $1.00 | +----------+
Więcej formatów liczbowych
Istnieje wiele innych ciągów formatujących, których można użyć z FORMAT()
funkcjonować. Na przykład istnieją ciągi formatujące dla wartości procentowych, stałoprzecinkowych, wykładniczych (naukowych), szesnastkowych i innych.
Ciągi formatu liczbowego są podzielone na standardowe i niestandardowe.
Poniższe dwa artykuły zawierają listę wszystkich ciągów formatu numerycznego, w tym przykłady:
- Standardowe ciągi formatu numerycznego
- Niestandardowe ciągi formatu liczb
Zobacz także Jak formatować liczby w SQL Server, aby uzyskać więcej przykładów formatowania liczb.
Przykład 3 – Formatowanie daty
Oto przykład formatowania daty:
SELECT GETDATE() AS 'Unformatted Date', FORMAT( GETDATE(), 'D') AS 'Formatted Date';
Wynik:
+-------------------------+------------------------+ | Unformatted Date | Formatted Date | |-------------------------+------------------------| | 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 | +-------------------------+------------------------+
W tym przypadku użyłem D
który określa wzór długiej daty.
Więcej formatów dat
Istnieje wiele innych ciągów formatujących, których można użyć do formatowania dat. Podobnie jak w przypadku ciągów formatu numerycznego, ciągi formatu daty i godziny są podzielone na standardowe i niestandardowe, dzięki czemu możesz tworzyć własne formaty niestandardowe lub możesz polegać na standardowym.
Poniższe dwa artykuły zawierają listę wszystkich ciągów formatu daty i godziny, w tym przykłady:
- Ciągi standardowego formatu daty i godziny
- Niestandardowe ciągi formatu daty i godziny
Zobacz także Jak sformatować datę i godzinę w SQL Server, aby uzyskać więcej przykładów.
Przykład 4 – Opcjonalna culture
Argument
Oto przykład użycia culture
argument do zwrócenia wartości w różnych walutach:
SELECT FORMAT(1, 'C', 'fr-FR') AS 'France', FORMAT(1, 'C', 'th-TH') AS 'Thailand', FORMAT(1, 'C', 'ja-JP') AS 'Japan';
Wynik:
+----------+------------+---------+ | France | Thailand | Japan | |----------+------------+---------| | 1,00 € | ฿1.00 | ¥1 | +----------+------------+---------+
FORMAT()
funkcja akceptuje dowolną kulturę obsługiwaną przez .NET Framework jako argument; nie ogranicza się do języków wyraźnie obsługiwanych przez SQL Server.
Jeśli nie podasz tego argumentu, używany jest język bieżącej sesji.
Aby uzyskać więcej przykładów, zobacz Jak ustawienia języka mogą wpłynąć na FORMAT()
Wyniki.
Przykład 5 – Nieprawidłowa culture
Argument
Jeśli podasz nieprawidłową kulturę, pojawi się błąd:
SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';
Wynik:
The culture parameter 'oop-SS!' provided in the function call is not supported.
Przykład 6 – Nieprawidłowa wartość formatu
Jednak w przypadku innych błędów funkcja zwraca NULL
. Na przykład, oto co się stanie, jeśli podam nieprawidłową wartość do sformatowania:
SELECT FORMAT(GETDATE(), 'C') AS 'Result';
Wynik:
+----------+ | Result | |----------| | NULL | +----------+
W tym przypadku próbowałem sformatować datę na walutę, dlatego wynikiem było NULL
.
Prawidłowe typy danych
FORMAT()
opiera się na obecności .NET Framework Common Language Runtime (CLR) i używa reguł formatowania CLR.
Następujące typy danych można sformatować za pomocą FORMAT()
funkcjonować. Ta lista zawiera dopuszczalne typy danych dla ciągu wejściowego wraz z ich równoważnymi typami mapowania .NET Framework.
Kategoria | Typ | Typ .NET |
---|---|---|
Numeryczne | duży | Int64 |
Numeryczne | int | Int32 |
Numeryczne | mały | Int16 |
Numeryczne | tinyint | Bajt |
Numeryczne | dziesiętny | SqlDecimal |
Numeryczne | liczbowe | SqlDecimal |
Numeryczne | pływający | Podwójny |
Numeryczne | prawdziwe | Pojedynczy |
Numeryczne | małe pieniądze | Dziesiętny |
Numeryczne | pieniądze | Dziesiętny |
Data i godzina | data | DataGodzina |
Data i godzina | czas | Przedział czasu |
Data i godzina | data i godzina | DataGodzina |
Data i godzina | smalldatetime | DataGodzina |
Data i godzina | data/godzina2 | DataGodzina |
Data i godzina | przesunięcie daty i godziny | Przesunięcie daty i godziny |
Dwukropki ucieczki i kropki dla typu danych „czas”
Podczas korzystania z FORMAT
, dwukropki i kropki muszą być zmienione (jest to zgodne z zasadami formatowania CLR). Dlatego też, gdy ciąg formatujący (drugi parametr) zawiera dwukropek lub kropkę, dwukropek lub kropka muszą być poprzedzone ukośnikiem odwrotnym, gdy wartość wejściowa (pierwszy parametr) ma czas typ danych.
Przykład:
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';
Wynik:
+--------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |--------------------+-------------+-----------| | 12:15:00 | NULL | 12.15 | +--------------------+-------------+-----------+
Tak więc zgodnie z oczekiwaniami ciąg znaków bez zmiany znaczenia zwraca NULL
.
Jak wspomniano, dotyczy to tylko czasu typ danych. Jeśli zmienimy wartość wejściową na inny typ danych, nie musimy jej zmieniać:
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';
Wynik:
+-------------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |-------------------------+-------------+-----------| | 1900-01-01 12:15:00.000 | 12.15 | 12.15 | +-------------------------+-------------+-----------+
W tym przypadku wartością wejściową jest data-godzina , a zatem wynik jest w porządku bez ucieczki.
Możesz również użyć odwrotnego ukośnika, aby zmienić dowolny inny znak, który chcesz uwzględnić w ciągu wynikowym, który w przeciwnym razie byłby interpretowany jako specyfikator formatu. Poprzedzenie znaku ukośnikiem odwrotnym oznacza, że następujący znak jest literałem znakowym, który powinien być zawarty w ciągu wynikowym bez zmian.
W niestandardowym ciągu formatu daty i godziny d
, f
, F
, g
, h
, H
, K
, m
, M
, s
, t
, y
, z
, :
lub /
znaki są interpretowane jako specyfikatory formatu niestandardowego, a nie jako znaki dosłowne.
W niestandardowym ciągu formatu numerycznego #
, 0
, .
, ,
, %
i ‰
symbole są interpretowane jako specyfikatory formatu, a nie jako znaki dosłowne. Wielkie i małe litery E
jak również +
i -
symbole mogą być również interpretowane jako specyfikatory formatu, w zależności od ich pozycji w ciągu formatu.
Jeśli potrzebujesz dołączyć odwrotny ukośnik w ciągu wynikowym, zamień go innym odwrotnym ukośnikiem.
Zdalne
FORMAT()
funkcja nie może być zdalna, ponieważ zależy to od obecności CLR. Zdalny dostęp do funkcji, która wymaga CLR, może spowodować błąd na zdalnym serwerze.
Kiedy używać FORMAT()
Funkcja
Microsoft zaleca, aby FORMAT()
funkcja jest używana do formatowania wartości daty/czasu i liczb jako ciągów z uwzględnieniem ustawień regionalnych, a dla ogólnych konwersji typów danych albo CAST()
funkcji lub funkcji CONVERT()
zamiast tego należy użyć funkcji.