V SQL Server můžete použít T-SQL FORMAT()
funkci formátování času datový typ. Pokud však potřebujete přidat označení AM/PM, budete muset použít jiný typ dat. Důvodem je čas datový typ je konkrétně založen na 24hodinovém formátu, a proto je čas formátován jako takový.
Příklad 1 – Porovnání ‚času‘ s ‚datetime‘
Zde je příklad demonstrující, co se stane, když se pokusíte formátovat datový typ „čas“ s označením 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';
Výsledek:
+------------+--------+ | datetime | time | |------------+--------| | 11:28 AM | NULL | +------------+--------+
Pokud se pokusíte přidat označení AM/PM k hodnotě ‚čas‘, dostanete NULL
.
Pokud tedy potřebujete k datovému typu času přidat AM nebo PM, budete jej muset nejprve převést na jiný datový typ a poté jej naformátovat.
Všimněte si, že FORMAT()
funkce ve skutečnosti stejně vrátí výsledek jako řetězec (pokud výsledek není NULL
).
Pokud vás zajímá, proč je ve druhém formátovacím řetězci zpětné lomítko, je to vyžadováno pouze po čas datový typ a používá se k escapování dvojtečky (a případných teček). Více o tom zde.
Příklad 2 – Převod „času“ na „datum a čas“
Tento příklad je téměř totožný s předchozím příkladem, až na to, že se jej snažím učinit realističtější. V tomto jsem explicitně nastavil proměnnou jako datový typ „čas“ a poté se ji pokusil naformátovat. Poté jej přenesu jako „datetime“ a poté jej znovu naformátuji.
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CAST(@thetime AS datetime), 'hh:mm tt') 'datetime';
Výsledek:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Pokud dáváte přednost použití CONVERT()
funkce, takto by to vypadalo:
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';
Výsledek:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Nebo můžete hodnotu jednoduše přiřadit jiné proměnné požadovaného typu:
DECLARE @thetime time = '11:28:15' DECLARE @thedatetime datetime = @thetime SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(@thedatetime, 'hh:mm tt') 'datetime';
Výsledek:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Příklad 3 – Označení jedním písmenem AM/PM
Můžete také použít jeden t
pro určení jednopísmenného označení 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';
Výsledek:
+---------+---------+ | AM | PM | |---------+---------| | 11:28 A | 11:28 P | +---------+---------+
Příklad 4 – Bez použití funkce FORMAT()
FORMAT()
Funkce byla zavedena v SQL Server 2012. Pokud používáte dřívější verzi SQL Server, budete muset použít jinou metodu pro přidání označení AM/PM. Zde je jeden způsob, jak to udělat:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 100) Result;
Výsledek:
+----------+ | Result | |----------| | 11:28AM | +----------+
Případně můžete použít nahradit 100
s 0
pro stejný výsledek:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 0) Result;
Výsledek:
+----------+ | Result | |----------| | 11:28AM | +----------+