Di SQL Server, Anda dapat menggunakan T-SQL FORMAT()
berfungsi untuk memformat waktu tipe data. Namun, jika Anda perlu menambahkan penanda AM/PM, Anda harus menggunakan tipe data yang berbeda. Ini karena waktu tipe data secara khusus didasarkan pada jam 24 jam, dan oleh karena itu waktu diformat seperti itu.
Contoh 1 – Membandingkan 'waktu' dengan 'datetime'
Berikut ini contoh untuk menunjukkan apa yang terjadi jika Anda mencoba memformat tipe data 'waktu' dengan penanda 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';
Hasil:
+------------+--------+ | datetime | time | |------------+--------| | 11:28 AM | NULL | +------------+--------+
Jika Anda mencoba menambahkan penanda AM/PM ke nilai 'waktu', Anda akan mendapatkan NULL
.
Oleh karena itu, jika Anda perlu menambahkan AM atau PM ke tipe data waktu, Anda harus mengonversinya ke tipe data lain terlebih dahulu, lalu memformatnya.
Perhatikan bahwa FORMAT()
fungsi sebenarnya mengembalikan hasilnya sebagai string (kecuali hasilnya NULL
).
Jika Anda bertanya-tanya mengapa ada garis miring terbalik di string format kedua, ini hanya diperlukan untuk waktu tipe data, dan digunakan untuk keluar dari titik dua (dan titik apa pun). Selengkapnya tentang itu di sini.
Contoh 2 – Mengubah 'waktu' menjadi 'waktu-tanggal'
Contoh ini hampir identik dengan contoh sebelumnya, kecuali saya mencoba membuatnya lebih realistis. Dalam hal ini, saya secara eksplisit menetapkan variabel sebagai tipe data 'waktu' dan kemudian mencoba memformatnya. Saya kemudian mentransmisikannya sebagai 'datetime' sebelum memformatnya lagi.
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CAST(@thetime AS datetime), 'hh:mm tt') 'datetime';
Hasil:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Jika Anda lebih suka menggunakan CONVERT()
fungsi, inilah yang akan terlihat seperti:
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';
Hasil:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Atau Anda bisa menetapkan kembali nilai ke variabel lain dari jenis yang diinginkan:
DECLARE @thetime time = '11:28:15' DECLARE @thedatetime datetime = @thetime SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(@thedatetime, 'hh:mm tt') 'datetime';
Hasil:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Contoh 3 – Penanda AM/PM Satu Huruf
Anda juga dapat menggunakan satu t
untuk menentukan satu huruf AM/PM penanda:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm t') 'AM', FORMAT(CAST('23:28:15' AS datetime), 'hh:mm t') 'PM';
Hasil:
+---------+---------+ | AM | PM | |---------+---------| | 11:28 A | 11:28 P | +---------+---------+
Contoh 4 – Tanpa menggunakan Fungsi FORMAT()
FORMAT()
fungsi diperkenalkan di SQL Server 2012. Jika Anda menggunakan versi SQL Server yang lebih lama, Anda harus menggunakan metode yang berbeda untuk menambahkan penanda AM/PM. Inilah salah satu cara Anda dapat melakukannya:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 100) Result;
Hasil:
+----------+ | Result | |----------| | 11:28AM | +----------+
Atau, Anda dapat menggunakan ganti 100
dengan 0
untuk hasil yang sama:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 0) Result;
Hasil:
+----------+ | Result | |----------| | 11:28AM | +----------+