W SQL Server możesz użyć T-SQL FORMAT()
funkcja formatowania czasu typ danych. Jeśli jednak chcesz dodać oznaczenie AM/PM, musisz użyć innego typu danych. Dzieje się tak, ponieważ czas typ danych jest oparty na zegarze 24-godzinnym, dlatego czas jest formatowany jako taki.
Przykład 1 – Porównanie „czasu” z „data-godzina”
Oto przykład pokazujący, co się stanie, jeśli spróbujesz sformatować typ danych „czas” za pomocą oznaczenia AM/PM:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm tt') 'datetime', FORMAT(CAST('11:28:15' AS time), 'hh\:mm tt') 'time';
Wynik:
+------------+--------+ | datetime | time | |------------+--------| | 11:28 AM | NULL | +------------+--------+
Jeśli spróbujesz dodać oznaczenie AM/PM do wartości „czas”, otrzymasz NULL
.
Dlatego jeśli chcesz dodać AM lub PM do typu danych czasu, musisz najpierw przekonwertować go na inny typ danych, a następnie sformatować.
Zauważ, że FORMAT()
funkcja faktycznie zwraca wynik jako ciąg znaków (chyba że wynikiem jest NULL
).
Jeśli zastanawiasz się, dlaczego w drugim ciągu formatu znajduje się ukośnik odwrotny, jest to wymagane tylko czas typ danych i jest używany do zmiany dwukropka (i wszelkich kropek). Więcej na ten temat tutaj.
Przykład 2 – Konwersja „czasu” na „data-godzina”
Ten przykład jest prawie identyczny z poprzednim przykładem, z wyjątkiem tego, że staram się uczynić go bardziej realistycznym. W tym przypadku jawnie ustawiam zmienną jako typ danych „czas”, a następnie próbuję go sformatować. Następnie przesyłam go jako „datetime” przed ponownym formatowaniem.
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CAST(@thetime AS datetime), 'hh:mm tt') 'datetime';
Wynik:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Jeśli wolisz używać CONVERT()
funkcja, oto jak by to wyglądało:
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';
Wynik:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Możesz też po prostu ponownie przypisać wartość do innej zmiennej żądanego typu:
DECLARE @thetime time = '11:28:15' DECLARE @thedatetime datetime = @thetime SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(@thedatetime, 'hh:mm tt') 'datetime';
Wynik:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Przykład 3 – Jednoliterowe oznaczenie AM/PM
Możesz także użyć pojedynczego t
aby określić jednoliterowe oznaczenie AM/PM:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm t') 'AM', FORMAT(CAST('23:28:15' AS datetime), 'hh:mm t') 'PM';
Wynik:
+---------+---------+ | AM | PM | |---------+---------| | 11:28 A | 11:28 P | +---------+---------+
Przykład 4 – bez użycia funkcji FORMAT()
FORMAT()
funkcja została wprowadzona w SQL Server 2012. Jeśli używasz wcześniejszej wersji SQL Server, musisz użyć innej metody, aby dodać oznaczenie AM/PM. Oto jeden ze sposobów, w jaki możesz to zrobić:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 100) Result;
Wynik:
+----------+ | Result | |----------| | 11:28AM | +----------+
Alternatywnie możesz użyć zastąpić 100
z 0
dla tego samego wyniku:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 0) Result;
Wynik:
+----------+ | Result | |----------| | 11:28AM | +----------+