Transact-SQL mencakup banyak fungsi yang membantu kami bekerja dengan tanggal dan waktu. Salah satu tugas yang lebih umum ketika bekerja dengan tanggal adalah untuk mengekstrak bagian yang berbeda dari tanggal. Misalnya, terkadang kita hanya menginginkan tahun, atau bulan. Di lain waktu kita mungkin menginginkan hari dalam seminggu. Bagaimanapun, ada banyak cara untuk melakukan ini di SQL Server.
Secara khusus, fungsi berikut memungkinkan Anda untuk mengembalikan hari, bulan, dan tahun dari tanggal di SQL Server.
DAY()
,MONTH()
, danYEAR()
DATEPART()
DATENAME()
FORMAT()
Fungsi-fungsi ini dijelaskan di bawah ini.
Fungsi DAY(), MONTH(), dan YEAR()
Cara paling jelas untuk mengembalikan hari, bulan, dan tahun dari tanggal adalah dengan menggunakan fungsi T-SQL dengan nama yang sama. Ya, T-SQL memiliki fungsi yang dibuat khusus untuk mengembalikan ketiga bagian tanggal ini.
Berikut ini contoh cara kerjanya:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DAY(@date) AS DAY, MONTH(@date) AS MONTH, YEAR(@date) AS YEAR;
Hasil:
+-------+---------+--------+ | DAY | MONTH | YEAR | |-------+---------+--------| | 2 | 6 | 2018 | +-------+---------+--------+
Fungsi-fungsi ini mengembalikan datepart sebagai bilangan bulat. Mereka mengembalikan hasil yang sama dengan DATEPART()
fungsi kembali untuk bagian tanggal yang ditentukan.
Fungsi DATEPART()
DATEPART()
fungsi dibangun khusus untuk mengembalikan bagian tertentu dari tanggal. Oleh karena itu, kita dapat menggunakan fungsi ini untuk mengembalikan hasil yang sama persis seperti contoh sebelumnya:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DATEPART(day, @date) AS DAY, DATEPART(weekday, @date) AS WEEKDAY, DATEPART(month, @date) AS MONTH, DATEPART(year, @date) AS YEAR;
Hasil:
+-------+-----------+---------+--------+ | DAY | WEEKDAY | MONTH | YEAR | |-------+-----------+---------+--------| | 2 | 7 | 6 | 2018 | +-------+-----------+---------+--------+
Salah satu manfaat menggunakan fungsi ini adalah Anda juga dapat mengembalikan bagian lain dari tanggal dan waktu. Seperti yang Anda lihat dengan contoh ini, saya mengembalikan hari kerja dan juga hari (day
adalah hari dalam sebulan, weekday
adalah hari dalam seminggu). Anda juga dapat mengembalikan berbagai bagian waktu, seperti menit, detik, milidetik, dll. Untuk contoh lainnya, lihat DATEPART()
Contoh di SQL Server.
DATEPART()
fungsi mengembalikan hasilnya sebagai bilangan bulat, dan oleh karena itu, Anda tidak akan bisa mendapatkan nama bulan atau nama hari kerja dari tanggal tersebut. Namun jangan khawatir, Anda dapat menggunakan DATENAME()
atau FORMAT()
berfungsi untuk itu.
Fungsi DATENAME()
DATENAME()
fungsinya mirip dengan DATEPART()
fungsi, kecuali bahwa ia mengembalikan hasil sebagai string karakter, bukan bilangan bulat. DATENAME()
juga mengembalikan bulan dan hari kerja sebagai nama lengkapnya, bukan nilai numeriknya.
Contoh:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DATENAME(day, @date) AS DAY, DATENAME(weekday, @date) AS WEEKDAY, DATENAME(month, @date) AS MONTH, DATENAME(year, @date) AS YEAR;
Hasil:
+-------+-----------+---------+--------+ | DAY | WEEKDAY | MONTH | YEAR | |-------+-----------+---------+--------| | 2 | Saturday | June | 2018 | +-------+-----------+---------+--------+
Untuk lebih banyak contoh fungsi ini, lihat DATENAME()
Contoh di SQL Server.
Fungsi FORMAT()
Kita dapat menggunakan FORMAT()
fungsi untuk mengembalikan nilai yang sama dengan DATENAME()
fungsi, dan banyak lagi.
Ini adalah fungsi yang lebih serbaguna daripada yang sebelumnya. Ini memungkinkan Anda untuk memformat tanggal/waktu serta nilai numerik sebagai string. Nilai yang dikembalikan adalah nvarchar atau null (bergantung pada input), dan panjang string ditentukan oleh format yang ditentukan.
FORMAT()
juga menyediakan lebih banyak opsi untuk bagaimana datepart disajikan. Anda dapat menentukan apakah akan menampilkannya sebagai satu karakter, dua karakter, tiga, empat, dan bahkan lima dalam beberapa kasus.
Berikut adalah contoh untuk ditunjukkan.
Hari
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'd ') AS d, FORMAT(@date, 'dd') AS dd, FORMAT(@date, 'ddd') AS ddd, FORMAT(@date, 'dddd') AS dddd;
Hasil:
+-----+------+-------+----------+ | d | dd | ddd | dddd | |-----+------+-------+----------| | 2 | 02 | Sat | Saturday | +-----+------+-------+----------+
Bulan
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'M ') AS M, FORMAT(@date, 'MM') AS MM, FORMAT(@date, 'MMM') AS MMM, FORMAT(@date, 'MMMMM') AS MMMM;
Hasil:
+-----+------+-------+--------+ | M | MM | MMM | MMMM | |-----+------+-------+--------| | 6 | 06 | Jun | June | +-----+------+-------+--------+
Tahun
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'y ') AS y, FORMAT(@date, 'yy') AS yy, FORMAT(@date, 'yyy') AS yyy, FORMAT(@date, 'yyyy') AS yyyy, FORMAT(@date, 'yyyyy') AS yyyyy;
Hasil:
+-----+------+-------+--------+---------+ | y | yy | yyy | yyyy | yyyyy | |-----+------+-------+--------+---------| | 18 | 18 | 2018 | 2018 | 02018 | +-----+------+-------+--------+---------+
Perhatikan bahwa kami memiliki opsi untuk memformat bagian tahun sebagai lima digit.
Tentang Jumlah Digit
Saat mengembalikan bagian tanggal dalam bentuk digit, penentu format menentukan jumlah digit minimum yang akan dikembalikan. Misalnya, saat menggunakan yyy
, tahun akan ditampilkan sebagai tiga digit jika tahun adalah 0008
tetapi sebagai empat digit jika tahun adalah 2008
.
Contoh:
DECLARE @date datetime2 = '0008-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'y ') AS y, FORMAT(@date, 'yy') AS yy, FORMAT(@date, 'yyy') AS yyy, FORMAT(@date, 'yyyy') AS yyyy, FORMAT(@date, 'yyyyy') AS yyyyy;
Hasil:
+-----+------+-------+--------+---------+ | y | yy | yyy | yyyy | yyyyy | |-----+------+-------+--------+---------| | 8 | 08 | 008 | 0008 | 00008 | +-----+------+-------+--------+---------+
Juga, saat menggunakan opsi tunggal (mis. d
) sebagai penentu tanggal, Anda harus menambahkan spasi jika Anda hanya ingin bagian tanggal itu dikembalikan dengan sendirinya. Jika Anda tidak melakukan ini, Anda akan mendapatkan lebih dari satu bagian tanggal itu.
Contoh:
DECLARE @date datetime2 = '2008-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'd ') AS 'Space', FORMAT(@date, 'd') AS 'No Space', FORMAT(@date, 'M ') AS 'Space', FORMAT(@date, 'M') AS 'No Space', FORMAT(@date, 'y ') AS 'Space', FORMAT(@date, 'y') AS 'No Space';
Hasil:
+---------+------------+---------+------------+---------+------------+ | Space | No Space | Space | No Space | Space | No Space | |---------+------------+---------+------------+---------+------------| | 2 | 6/2/2008 | 6 | June 2 | 8 | June 2008 | +---------+------------+---------+------------+---------+------------+
Untuk lebih FORMAT()
contoh, lihat Cara Memformat Tanggal dan Waktu di SQL Server.