W SQL Server, gdy używasz T-SQL FORMAT()
funkcja formatowania czasu typ danych, musisz pamiętać o zmianie znaczenia dwukropków lub kropek w ciągu formatu.
Dzieje się tak, ponieważ FORMAT()
funkcja opiera się na regułach formatowania CLR, które dyktują, że dwukropki i kropki muszą zostać zmienione. 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 1 – Ucieczka z okrężnicy
Oto podstawowy przykład użycia funkcji FORMAT()
funkcja formatowania czasu typ danych.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Wynik:
+----------+ | Result | |----------| | 11:28 | +----------+
Zwróć uwagę na odwrotny ukośnik w ciągu formatu.
Przykład 2 – Ucieczka przed okresem
To samo dotyczy sytuacji, gdy chcemy sformatować go z kropką:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Wynik:
+----------+ | Result | |----------| | 11.28 | +----------+
Przykład 3 – Bez ucieczki
Oto, co się stanie, jeśli nie uciekniemy od okrężnicy lub okresu.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Wynik:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
Otrzymujemy NULL
w obu przypadkach.
Przykład 4 – Data i godzina (nie trzeba uciekać)
Musisz zmienić dwukropek i kropkę tylko wtedy, gdy wartość wejściowa ma typ danych czas . Jeśli jest data i godzina (lub datagodzina2 itp.), nie musisz im uciekać.
Jeśli użyję poprzedniego przykładu, ale przełączę wartości wejściowe na datetime2 , otrzymujemy pożądany wynik bez konieczności ucieczki:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Wynik:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
To samo dotyczy sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Wynik:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+