Anda di halaman 1dari 15

Fungsi Tanggal & Waktu SQL

Bagian ini menjelaskan tentang fungsi yang dapat digunakan untuk memanipulasi nilai-nilai
temporal. Setiap tipe temporal memiliki rentang nilai yang valid, begitu juga "nol" yang bisa
digunakan ketika Anda ingin menentukan nilai tidak valid yang mana tidak bisa diwakilkan oleh
MySQL.

Fungsi Tanggal dan Waktu MySQL

1. NOW(fsp) dan SYSDATE(fsp)


Fungsi ini akan mengembalikan nilai berupa tanggal dan waktu saat ini, dalam format 'YYYY-MM-
DD HH:MM:SS' atau YYYYMMDDHHMMSS, tergantung pada konteks apakah fungsi tersebut
digunakan, apakah dalam string atau numerik. Nilai tersebut dinyatakan dalam zona waktu saat ini
(sedang berlangsung).

Argumen fsp (fractional seconds precision) digunakan untuk menentukan tingkat presisi nilai detik,
sehingga menjadi bentuk pecahan. Tingkat presisi hanya dibatasi dari 0 sampai 6 dibelakang koma.
Contoh:
SELECT NOW();

Output:

Saat dimana fungsi NOW() dieksekusi

Saat dimana fungsi NOW() disertai argumen dieksekusi

SELECT NOW(4),
SYSDATE(3);

Output:

Saat dimana fungsi NOW() dan SYSDATE() disertai argumen dieksekusi

2. MONTH(date) dan MONTHNAME(date)


Fungsi ini akan mengembalikan nilai berupa bulan berdasarkan argumen yang disertakan. Jika
MONTH(date), maka nilai tersebut akan diekspresikan berupa angka mulai dari 1 sampai 12. Jika
MONTHNAME(date), maka nilai tersebut akan diekspresikan berupa text sesuai dengan nama
bulannya.
Contoh:
SELECT MONTH('2017-02-21'),
MONTHNAME('2017-02-21');

Output:

MONTH(date) dan MONTHNAME(date)

3. DAY(date) atau DAYOFMONTH(date) dan


DAYNAME(date)
DAY() adalah sinonim dari DAYOFMONTH(), yaitu fungsi yang akan mengembalikan nilai berupa
hari dalam rentang 1 sampai 31, atau akan mengembalikan nilai 0 jika argumen tanggalnya seperti
ini '0000-00-00' atau '2008-00-00'. Sedangkan DAYNAME(date) akan mengembalikan nilai berupa
text sesuai nama harinya.

Contoh:
SELECT
DAY('2017-02-21'),
DAYOFMONTH('2017-02-21'),
DAYNAME('2017-02-21');

Output:

DAY(date) atau DAYOFMONTH(date) dan DAYNAME(date)


4. WEEK(date, mode)
Fungsi ini akan mengembalikan jumlah/urutan minggu dimulai sejak tahun baru sampai tanggal
argumen. Ada dua jenis bentuk argumen WEEK() yang memungkinkan Anda untuk menentukan
apakah seminggu tersebut dimulai pada hari minggu atau hari senin, dan apakah nilai yang
dikembalikan harus berkisar 0 sampai 53 atau 1 sampai 53. Jika mode argumen dihilangkan, maka
format default week akan otomatis digunakan.
ommand-Line Format --default_week_format=#
Name default_week_format
Variable Scope Global, Session
System Variable
Dynamic
Yes
Variable
Type integer
Default 0
Permitted Values
Min Value 0
Max Value 7

Tabel di bawah ini menjelaskan tentang bagaimana mode argumen bekerja;


Mod Rang
First day of week Week 1 is the first week …
e e
0 Sunday 0-53 with a Sunday in this year
1 Monday 0-53 with 4 or more days this year
2 Sunday 1-53 with a Sunday in this year
3 Monday 1-53 with 4 or more days this year
4 Sunday 0-53 with 4 or more days this year
5 Monday 0-53 with a Monday in this year
6 Sunday 1-53 with 4 or more days this year
7 Monday 1-53 with a Monday in this year

Untuk nilai mode dengan maksud "4 hari atau lebih pada tahun ini", atau dengan kata lain
"perdebatan tentang jumlah hari dalam seminggu yang berada di antara desember-januari" telah
diatur sesuai ISO 8601: 1988:

 Jika seminggu yang mengandung 1 Januari memiliki 4 atau lebih hari di tahun baru, maka itu
adalah minggu ke-1.
 Jika tidak, maka itu adalah minggu terakhir dari tahun sebelumnya, dan minggu depannya
adalah minggu ke-1.

Sementara itu Achmad Solichin menjelaskan bahwa, fungsi ini digunakan untuk mendapatkan
urutan minggu (integer) dari suatu tanggal yang diberikan dalam setahun.

Contoh:
SELECT WEEK('2008-02-20'),
WEEK('2008-02-20',0),
WEEK('2008-02-20',1),
WEEK('2008-12-31',1);
Output:

Fungsi WEEK()

SELECT WEEK(NOW()),
WEEK(NOW(),0),
WEEK(NOW(),1),
WEEK('2008-12-31',2);

Output:

Fungsi NOW() dalam WEEK()

5. WEEKDAY(date)
Mengembalikan nilai berupa index hari kerja untuk tanggal argumen, dimana 0 = Senin, 1 =
Selasa, ...s/d. 6 = Minggu.

Contoh:
SELECT WEEKDAY(NOW()),
WEEKDAY('2017-2-22');

Output:
WEEKDAY(date)

6. WEEKOFYEAR(date)
Fungsi ini akan mengembalikan urutan minggu pada tanggal argumen, dengan rentang 1 sampai
53. WEEKOFYEAR() adalah fungsi yang ekuivalen(setara) dengan WEEK(date,3).

Contoh:
SELECT WEEKOFYEAR(NOW());

Output:

WEEKOFYEAR(date)

Jadi memang benar saat ini NOW(), sudah masuk pada minggu ke-8. Berikut adalah detail
ulasannya:
Penghitungan urutan minggu secara manual untuk saat ini NOW() bertepatan tanggal 22-Feb-2017

7. YEAR(date)
Fungsi ini akan mengembalikan nilai tahun pada tanggal argumen, berkisar antara 1000-9999, atau
0 jika itu diisi dengan nol.

Contoh:
SELECT YEAR('1987-01-01'),
YEAR(NOW());

Output:

YEAR(date)
8. HOUR(time) 
Fungsi ini akan mengembalikan nilai waktu berupa jam. Rentang nilai yang dikembalikan berkisar 0
sampai 23 time-of-day (jumlah jam dalam sehari). Namun, rentang waktu sebenarnya jauh lebih
besar dari itu (tidak dibatasi oleh hari), sehingga nilai jam dapat dikembalikan lebih besar dari 23.

Sementara itu Achmad Solichin menjelaskan bahwa, fungsi ini digunakan untuk mendapatkan
bilangan jam dari suatu parameter waktu yang diberikan.

Contoh:
SELECT HOUR(NOW()),
-- Fungsi NOW() saya running saat pukul 11.19 PM
HOUR('23:59:03'),
HOUR('272:59:59');

Output:

HOUR(time) 

9. MINUTE(time)
Fungsi ini akan mengembalikan nilai waktu berupa menit, dalam rentang 0 sampai 59.

Sementara itu Achmad Solichin menjelaskan bahwa, fungsi ini digunakan untuk mendapatkan
bilangan menit dari suatu parameter waktu yang diberikan.

Contoh:
SELECT MINUTE('2008-02-03 10:05:03'),
MINUTE(NOW());
-- Fungsi NOW() saya running saat waktu
-- menunjukan pukul 11.25 PM.

Output:
MINUTE(time)

10. SECOND(time)
Fungsi ini akan mengembalikan nilai berupa detik, berkisar antara 0 sampai 59.

Sementara itu Achmad Solichin menjelaskan bahwa, fungsi ini digunakan untuk mendapatkan
bilangan detik dari suatu waktu yang diberikan.

Contoh:
SELECT SECOND('10:05:03'),
SECOND(NOW());
-- Fungsi NOW() saya running saat waktu
-- menunjukan pukul 11.33.? PM.

Output:

SECOND(time)

11. DATE_ADD(date,INTERVAL expr unit) dan


DATE_SUB(date,INTERVAL expr unit)
Dua fungsi tersebut akan melakukan operasi aritmatik (penambahan / pengurangan) tanggal.
Argumen date menentukan tanggal dimulai atau nilai datetime. Argumen expr adalah ekspresi untuk
menentukan interval nilai yang akan ditambahkan atau dikurangi dari tanggal dimulai. Argumen expr
adalah string; bisa dimulai dengan "-" untuk interval negatif. Argumen unit adalah keyword yang
menunjukan ekspresi mana yang harus di interpreted(ditafsirkan).

Keyword INTERVAL dan specifier unit (unit penunjuk) tidak bersifat case sensitive.

Tabel berikut menunjukan bagaimana format yang diharapkan oleh argumen expr untuk setiap nilai
unit.
Unit Value Expected expr Format
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
'DAYS
DAY_MICROSECOND
HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

Jika Anda menambahkan atau mengurangi nilai tanggal yang berisi paruh waktu, maka hasilnya
otomatis akan dikonversi ke nilai datetime.

Contoh:
SELECT DATE_ADD('2013-01-02', INTERVAL 1 DAY),
DATE_ADD('2013-01-02', INTERVAL 1 HOUR);

Output:

DATE_ADD(date,INTERVAL expr unit)


SELECT DATE_SUB('2013-01-02', INTERVAL 1 DAY),
DATE_SUB('2013-01-02', INTERVAL 1 HOUR);

Output:

DATE_SUB(date,INTERVAL expr unit)

Jika Anda menambahkan MONTH, YEAR_MONTH, atau YEAR dan tanggal yang dihasilkan
memiliki jumlah hari maksimum untuk bulan baru, maka hari akan diatur ke maksimum di bulan
baru.

Contoh:
SELECT DATE_ADD('2009-01-30', INTERVAL 1 MONTH);

Output:

DATE_ADD(date,INTERVAL expr unit)

12. ADDDATE(date,INTERVAL expr unit),


ADDDATE(expr,days) dan SUBDATE(date,INTERVAL
expr unit), SUBDATE(expr,days)
Ketika fungsi ini dipanggil dengan bentuk INTERVAL dari argumen kedua, ADDDATE() adalah
sinonim untuk DATE_ADD(). Sedangkan SUBDATE() adalah sinonim dari DATE_SUB().

Contoh:
SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY),
ADDDATE('2008-01-02', INTERVAL 31 DAY);
Output:

ADDDATE(date,INTERVAL expr unit)

Ketika fungsi ADDDATE() dipanggil menggunakan bentuk argumen keduanya format hari, maka
MySQL memperlakukan sebagai integer jumlah hari yang akan ditambahkan ke expr.
SELECT ADDDATE('2008-01-02', 31);

Output:

ADDDATE(expr,days) 

SELECT DATE_SUB('2008-01-02', INTERVAL 31 DAY),


SUBDATE('2008-01-02', INTERVAL 31 DAY);

Output:

SUBDATE(date,INTERVAL expr unit)

Ketika fungsi SUBDATE() dipanggil menggunakan bentuk argumen keduanya format hari, maka
MySQL memperlakukan sebagai integer jumlah hari yang akan ditambahkan ke expr.
SELECT SUBDATE('2008-01-02 12:00:00', 31);
Output:

SUBDATE(expr,days)

13. DATE_FORMAT(date,format)
Fungsi ini digunakan untuk memformat nilai tanggal sesuai dengan format string.

Specifier berkut dapat digunakan dalam format string. Karakter ini % diperlukan sebelum format
karakter specifier.

Sementara itu Achmad Solichin menjelaskan bahwa, fungsi ini digunakan untuk mem-format
tampilan tanggal.
Specifier Description
%a Nama hari disingkat (Sun..Sat)
%b Nama bulan disingkat (Jan..Dec)
%c Bulan, numerik (0..12)
%D Hari dalam sebulan dengan suffix bahasa Inggris (0th, 1st, 2nd, 3rd, …)
%d Hari dalam sebulan, numerik (00..31)
%e Hari dalam sebulan, numerik (0..31)
%f Mikrodetik (000000..999999)
%H Jam (00..23)
%h Jam (01..12)
%I Jam (01..12)
%i Menit, numerik (00..59)
%j Hari dalam setahun (001..366)
%k Jam (0..23)
%l Jam (1..12)
%M Nama bulan (January..December)
%m Bulan, numerik (00..12)
%p AM atau PM
%r Waktu, 12-jam (hh:mm:ss followed by AM or PM)
%S Detik (00..59)
%s Detik (00..59)
%T Waktu, 14-jam (hh:mm:ss)
%U Seminggu (00..53), dimana hari Minggu sebagai hari pertamanya; WEEK()
mode 0
%u Seminggu (00..53), dimana hari Senin sebagai hari pertamanya; WEEK()
mode 1
%V Seminggu (01..53), dimana hari Minggu sebagai hari pertamanya; WEEK()
mode 2, digunakan dengan %X
%v Seminggu (01..53), dimana hari Senin sebagai hari pertamanya; WEEK()
mode 3, digunakan dengan %X
%W Nama hari dalam seminggu (Sunday..Saturday)
%w Hari dalam seminggu (0=Sunday..6=Saturday)
%X Tahun untuk mingguan, dimana Minggu sebagai hari pertamanya, numerik, 4
digit, digunakan dengan %V
%x Tahun untuk mingguan, dimana Senin sebagai hari pertamanya, numerik, 4
digit, digunakan dengan %V
%Y Tahun, numerik, 4 digit
%y Tahun, numerik, 2 digit
%% Literal karakter %
%x X, untuk setiap "X" yang tidak tercantum dalam daftar diatas.

Rentang untuk specifier bulan dan hari dimulai dengan nol karena fakta bahwa MySQL mengijinkan
penyimpanan tanggal secara tidak lengkap seperti '2014-00-00'.

Bahasa yang digunakan untuk penamaan hari dan bulan disingkat, ini dikendalikan oleh nilai
variabel sistem Ic_time_names.

Untuk specifier %U, %u, %V, dan %v, Anda bisa melihatnya pada penjelasan tentang fungsi
WEEK(). Penggunaan mode akan mempengaruhi penomeran mingguan.

DATE_FORMAT() mengembalikan sebuah string dengan set karakter dan pemeriksaan yang
dilakukan oleh  character_set_connection dan collation_connection, sehingga dapat mengembalikan
nama bulan dan hari yang berisi karakter non-ASCII.

Contoh:
SELECT DATE_FORMAT (now(), '%d-%M-%Y %H:%i:%s') AS Contoh1,
DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y') AS Contoh2,
DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s') AS Contoh3,
DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j') AS Contoh4,
DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w') AS Contoh5,
DATE_FORMAT('1999-01-01', '%X %V') AS Contoh6,
DATE_FORMAT('2006-06-00', '%d') AS Contoh7;

Output:
DATE_FORMAT(date,format)

Anda mungkin juga menyukai