In SQL Server kunt u de T-SQL FORMAT()
. gebruiken functie om een tijd te formatteren data type. Als u echter de AM/PM-aanduiding moet toevoegen, moet u een ander gegevenstype gebruiken. Dit komt omdat de tijd gegevenstype is specifiek gebaseerd op een 24-uurs klok, en daarom is de tijd als zodanig geformatteerd.
Voorbeeld 1 – Vergelijk ‘tijd’ met ‘datetime’
Hier is een voorbeeld om te laten zien wat er gebeurt als u het gegevenstype 'tijd' probeert op te maken met de AM/PM-aanduiding:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm tt') 'datetime', FORMAT(CAST('11:28:15' AS time), 'hh\:mm tt') 'time';
Resultaat:
+------------+--------+ | datetime | time | |------------+--------| | 11:28 AM | NULL | +------------+--------+
Als u de AM/PM-aanduiding probeert toe te voegen aan een 'tijd'-waarde, krijgt u NULL
.
Als u daarom AM of PM aan een tijdgegevenstype moet toevoegen, moet u dit eerst naar een ander gegevenstype converteren en vervolgens formatteren.
Merk op dat de FORMAT()
functie retourneert het resultaat eigenlijk sowieso als een tekenreeks (tenzij het resultaat NULL
is) ).
Als je je afvraagt waarom er een backslash in de tekenreeks van het tweede formaat staat, is dit alleen nodig voor de tijd gegevenstype, en het wordt gebruikt om te ontsnappen aan de dubbele punt (en eventuele punten). Meer daarover hier.
Voorbeeld 2 – Omzetten van 'tijd' naar 'datetime'
Dit voorbeeld is bijna identiek aan het vorige voorbeeld, behalve dat ik dit realistischer probeer te maken. In deze heb ik expliciet een variabele ingesteld als een 'tijd'-gegevenstype en probeer dat vervolgens te formatteren. Ik cast het vervolgens als 'datetime' voordat ik het opnieuw formatteer.
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CAST(@thetime AS datetime), 'hh:mm tt') 'datetime';
Resultaat:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Als u liever de CONVERT()
. gebruikt functie, zo zou dat eruit zien:
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';
Resultaat:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Of u kunt de waarde gewoon opnieuw toewijzen aan een andere variabele van het gewenste type:
DECLARE @thetime time = '11:28:15' DECLARE @thedatetime datetime = @thetime SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(@thedatetime, 'hh:mm tt') 'datetime';
Resultaat:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Voorbeeld 3 – Enkele letter AM/PM-aanduiding
U kunt ook een enkele t
. gebruiken om een AM/PM-aanduiding met één letter op te geven:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm t') 'AM', FORMAT(CAST('23:28:15' AS datetime), 'hh:mm t') 'PM';
Resultaat:
+---------+---------+ | AM | PM | |---------+---------| | 11:28 A | 11:28 P | +---------+---------+
Voorbeeld 4 – Zonder de functie FORMAT() te gebruiken
De FORMAT()
functie is geïntroduceerd in SQL Server 2012. Als u een eerdere versie van SQL Server gebruikt, moet u een andere methode gebruiken om de AM/PM-aanduiding toe te voegen. Hier is een manier om dat te doen:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 100) Result;
Resultaat:
+----------+ | Result | |----------| | 11:28AM | +----------+
Als alternatief kunt u vervangen 100
. gebruiken met 0
voor hetzelfde resultaat:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 0) Result;
Resultaat:
+----------+ | Result | |----------| | 11:28AM | +----------+