Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak działa funkcja FORMAT() w programie SQL Server (T-SQL)

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksportuj zestaw wyników procedury składowanej do programu Excel w programie SSMS

  2. Najlepsze odpowiedzi na 5 palących pytań dotyczących funkcji COALESCE w SQL Server

  3. Zero impasu SQL z założenia - jakieś wzorce kodowania?

  4. Zwróć wszystkie wyłączone ograniczenia w programie SQL Server (przykład T-SQL)

  5. 10 wskazówek SP_EXECUTESQL, których należy unikać, aby uzyskać lepszy dynamiczny SQL