Topik ini menjelaskan sintaksis, parameter, dan contoh fungsi tanggal yang didukung oleh fitur analisis data. Anda dapat memilih fungsi tanggal yang sesuai untuk melakukan perhitungan atau konversi berdasarkan kebutuhan bisnis Anda.
Fungsi | Deskripsi |
Mengembalikan timestamp saat ini. | |
Mengubah nilai tanggal berdasarkan unit waktu yang ditentukan oleh datepart dan interval yang ditentukan oleh delta. | |
Menghitung perbedaan antara dua nilai tanggal berdasarkan unit waktu yang ditentukan oleh datepart. | |
Mengonversi timestamp UNIX tipe BIGINT menjadi nilai tanggal tipe DATETIME. | |
Mengonversi timestamp UTC menjadi timestamp dalam zona waktu tertentu. | |
Mengembalikan waktu sistem saat ini sebagai nilai tanggal. | |
Menentukan apakah string tanggal dapat dikonversi menjadi nilai tanggal dalam format tertentu. | |
Mengonversi string menjadi nilai tanggal dalam format tertentu. | |
Mengonversi nilai tanggal menjadi string dalam format tertentu. | |
Mengonversi nilai tanggal menjadi timestamp UNIX yang merupakan bilangan bulat. | |
Mengembalikan hari terakhir dari bulan di mana nilai tanggal jatuh. |
CURRENT_TIMESTAMP
Sintaksis
timestamp current_timestamp()Deskripsi
Mengembalikan timestamp saat ini. Nilai kembali tidak tetap.
Nilai Kembali
Nilai bertipe TIMESTAMP dikembalikan.
Contoh
-- Nilai kembali adalah '2017-08-03 11:50:30.661'. current_timestamp();
DATEADD
Sintaksis
datetime dateadd(datetime <date>, bigint <delta>, string <datepart>)Deskripsi
Mengubah nilai tanggal berdasarkan unit waktu yang ditentukan oleh datepart dan interval yang ditentukan oleh delta. Untuk menambahkan atau mengurangi interval ke atau dari waktu saat ini, Anda dapat memanggil fungsi ini bersama dengan fungsi GETDATE.
Parameter
tanggal: Wajib. Nilai bertipe DATETIME.
Jika nilai input bertipe STRING, nilai tersebut akan dikonversi secara implisit menjadi tipe DATETIME sebelum perhitungan. Jika nilai input bertipe lain, kesalahan akan dikembalikan.
delta: Wajib. Interval yang ingin ditambahkan ke atau dikurangi dari komponen tertentu dari nilai tanggal. Nilai parameter ini harus bertipe BIGINT. Jika nilai delta lebih besar dari 0, interval ditambahkan ke nilai tanggal. Sebaliknya, interval dikurangi dari nilai tanggal.
Jika nilai input bertipe STRING atau DOUBLE, nilai tersebut akan dikonversi secara implisit menjadi tipe BIGINT sebelum perhitungan. Jika nilai input bertipe lain, kesalahan akan dikembalikan.
nullJika Anda menambahkan atau mengurangi interval yang ditentukan oleh delta berdasarkan unit waktu yang ditentukan oleh datepart, carry atau return pada komponen tanggal yang lebih signifikan mungkin terjadi. Komponen tahun, bulan, jam, menit, dan detik dihitung menggunakan sistem angka yang berbeda. Komponen tahun menggunakan sistem angka basis-10. Komponen bulan menggunakan sistem angka basis-12. Komponen jam menggunakan sistem angka basis-24. Komponen menit dan detik menggunakan sistem angka basis-60.
Jika fungsi DATEADD menambahkan interval yang ditentukan oleh delta ke komponen bulan dari nilai tanggal dan operasi ini tidak menyebabkan overflow pada komponen hari, Anda dapat mempertahankan nilai komponen hari. Sebaliknya, Anda harus mengatur nilai komponen hari ke hari terakhir dari bulan yang ditentukan.
datepart: Wajib. Bagian tanggal yang ingin diubah dalam nilai tanggal. Nilainya adalah konstanta bertipe STRING. Jika format nilai input tidak valid atau nilai input bukan konstanta bertipe STRING, kesalahan akan dikembalikan.
Nilai parameter ini ditentukan sesuai dengan aturan konversi antara tipe STRING dan DATETIME. Nilai
yyyymenunjukkan bahwa fungsi DATEADD menambahkan atau mengurangi interval ke komponen tahun dari nilai tanggal. Nilaimmmenunjukkan bahwa fungsi DATEADD menambahkan atau mengurangi interval ke komponen bulan dari nilai tanggal. Nilaiddmenunjukkan bahwa fungsi DATEADD menambahkan atau mengurangi interval ke komponen hari dari nilai tanggal. Untuk informasi lebih lanjut tentang aturan konversi tipe data, lihat Konversi antara tipe STRING dan DATETIME. Format Tanggal/Waktu Ekstensi (EDTF) juga didukung, seperti -year,-month,-mon,-day, dan-hour.
Nilai Kembali
Nilai bertipe DATETIME dikembalikan. Jika parameter input diatur ke NULL, NULL dikembalikan.
Contoh
Contoh 1:
trans_date=2005-02-28 00:00:00.-- Nilai kembali adalah 2005-03-01 00:00:00. Setelah satu hari ditambahkan, hasilnya setelah hari terakhir Februari. Hari pertama Maret dikembalikan. dateadd(trans_date, 1, 'dd'); -- Nilai kembali adalah 2005-02-27 00:00:00. Satu hari dikurangi. dateadd(trans_date, -1, 'dd'); -- Nilai kembali adalah 2006-10-28 00:00:00. Setelah 20 bulan ditambahkan, bulan meluap, dan nilai tahun bertambah 1. dateadd(trans_date, 20, 'mm'); -- Nilai kembali adalah 2005-03-28 00:00:00. dateadd(trans_date, 1, 'mm');Contoh 2:
trans_date=2005-01-29 00:00:00.-- Nilai kembali adalah 2005-02-28 00:00:00. Februari 2005 hanya memiliki 28 hari. Oleh karena itu, hari terakhir Februari dikembalikan. dateadd(trans_date, 1, 'mm');Contoh 3:
trans_date2005-03-30 00:00:00.-- Nilai kembali adalah 2005-02-28 00:00:00. dateadd(trans_date, -1, 'mm');Contoh 4: Hitung waktu saat ini.
-- Jika waktu saat ini adalah 17 November 2020, 16:31:44, nilai kembali adalah 2020-11-16 16:31:44. dateadd(getdate(),-1,'dd');Contoh 5: Konversi eksplisit konstanta bertipe STRING menjadi tipe DATETIME.
-- Nilai kembali adalah 2005-02-28 00:00:00. dateadd(cast("2005-03-30 00:00:00" as datetime), -1, 'mm');
DATEDIFF
Sintaksis
bigint datediff(datetime <date1>, datetime <date2>, string <datepart>)Deskripsi
Menghitung perbedaan antara date1 dan date2. Perbedaan diukur dalam unit waktu yang ditentukan oleh datepart.
Parameter
date1 dan date2: Wajib. Nilai bertipe DATETIME. Nilai-nilai tersebut menunjukkan pengurang dan yang dikurangi. Jika nilai input bertipe STRING, nilai tersebut akan dikonversi secara implisit menjadi tipe DATETIME sebelum perhitungan. Jika nilai input bertipe lain, kesalahan akan dikembalikan.
datepart: Wajib. Bagian tanggal yang ingin diubah dalam nilai tanggal. Nilainya adalah konstanta bertipe STRING. Jika format nilai input tidak valid atau nilai input bukan konstanta bertipe STRING, kesalahan akan dikembalikan.
Nilai parameter ini ditentukan sesuai dengan aturan konversi antara tipe STRING dan DATETIME. Nilai
yyyymenunjukkan bahwa fungsi DATEADD menambahkan atau mengurangi interval ke komponen tahun dari nilai tanggal. Nilaimmmenunjukkan bahwa fungsi DATEADD menambahkan atau mengurangi interval ke komponen bulan dari nilai tanggal. Nilaiddmenunjukkan bahwa fungsi DATEADD menambahkan atau mengurangi interval ke komponen hari dari nilai tanggal. Untuk informasi lebih lanjut tentang aturan konversi tipe data, lihat Konversi antara tipe STRING dan DATETIME. Format Tanggal/Waktu Ekstensi (EDTF) juga didukung, seperti -year,-month,-mon,-day, dan-hour.nullFungsi ini mengabaikan unit yang lebih rendah berdasarkan unit waktu yang ditentukan oleh datepart dan kemudian menghitung hasilnya.
Nilai Kembali
Nilai bertipe BIGINT dikembalikan. Jika parameter input diatur ke NULL, NULL dikembalikan. Jika date1 lebih awal dari date2, nilai negatif dikembalikan.
Contoh
Contoh 1:
start=2005-12-31 23:59:59, end=2006-01-01 00:00:00.-- Nilai kembali adalah 1. datediff(end, start, 'dd'); -- Nilai kembali adalah 1. datediff(end, start, 'mm'); -- Nilai kembali adalah 1. datediff(end, start, 'yyyy'); -- Nilai kembali adalah 1. datediff(end, start, 'hh'); -- Nilai kembali adalah 1. datediff(end, start, 'mi'); -- Nilai kembali adalah 1. datediff(end, start, 'ss'); -- Nilai kembali adalah 1800. datediff(datetime'2013-05-31 13:00:00', '2013-05-31 12:30:00', 'ss'); -- Nilai kembali adalah 30. datediff(datetime'2013-05-31 13:00:00', '2013-05-31 12:30:00', 'mi');Contoh 2: Jika
waktu mulai adalah 2018-06-04 19:33:23.234 dan waktu akhir adalah 2018-06-04 19:33:23.250, nilai tanggal yang akurat hingga milidetik tidak menggunakan tipe DATETIME standar dan tidak dapat dikonversi secara implisit menjadi tipe DATETIME. Dalam hal ini, konversi eksplisit diperlukan.-- Nilai kembali adalah 16. datediff(to_date('2018-06-04 19:33:23.250', 'yyyy-mm-dd hh:mi:ss.ff3'), to_date('2018-06-04 19:33:23.234', 'yyyy-mm-dd hh:mi:ss.ff3') , 'ff3');
FROM_UNIXTIME
Sintaksis
datetime from_unixtime(bigint <unixtime>)Deskripsi
Mengonversi unixtime bertipe BIGINT menjadi nilai tanggal bertipe DATETIME.
Parameter
unixtime: Wajib. Nilai tanggal bertipe BIGINT dalam format UNIX. Nilai parameter ini akurat hingga detik. Jika nilai input bertipe STRING, DOUBLE, atau DECIMAL, nilai tersebut akan dikonversi secara implisit menjadi tipe BIGINT sebelum perhitungan.
Nilai Kembali
Nilai bertipe DATETIME dikembalikan. Jika parameter input diatur ke NULL, NULL dikembalikan.
Contoh
-- Nilai kembali adalah 1973-11-30 05:33:09. from_unixtime(123456789);
FROM_UTC_TIMESTAMP
Sintaksis
timestamp from_utc_timestamp({any primitive type}*, string <timezone>)Deskripsi
Mengonversi timestamp UTC menjadi timestamp dalam zona waktu tertentu.
Parameter
{any primitive type}*: Wajib. Timestamp bertipe TIMESTAMP, DATETIME, TINYINT, SMALLINT, INT, atau BIGINT. Jika nilainya bertipe TINYINT, SMALLINT, INT, atau BIGINT, unit waktu akurat hingga milidetik.
timezone: Wajib. Zona waktu tujuan ke dalam mana Anda ingin mengonversi zona waktu saat ini. Misalnya, Anda dapat mengatur parameter ini ke PST.
Fungsi ini hanya mendukung zona waktu Asia/Shanghai dan tidak mendukung zona waktu GMT+9.
Waktu UTC merujuk pada waktu di zona waktu UTC+0. Shanghai, Tiongkok berada di zona waktu UTC+8.
Nilai Kembali
Nilai bertipe TIMESTAMP dikembalikan.
Contoh
-- Unit nilai input adalah milidetik dan 2017-08-01 04:24:00.0 dikembalikan. from_utc_timestamp(1501557840000, 'PST'); -- Nilai kembali adalah 1970-01-30 08:00:00.0. from_utc_timestamp('1970-01-30 16:00:00','PST'); -- Nilai kembali adalah 1970-01-29 16:00:00.0. from_utc_timestamp('1970-01-30','PST') ;
GETDATE
Sintaksis
datetime getdate()Deskripsi
Mengembalikan waktu sistem saat ini.
Nilai Kembali
Tanggal dan waktu saat ini dikembalikan, yang bertipe DATETIME.
ISDATE
Sintaksis
boolean isdate(string <date>, string <format>)Deskripsi
Menentukan apakah string tanggal dapat dikonversi menjadi nilai tanggal dalam format tertentu. Jika string tanggal dapat dikonversi menjadi nilai tanggal dalam format tertentu,
truedikembalikan. Sebaliknya,falsedikembalikan.Parameter
date: Wajib. Nilai bertipe STRING. Jika nilai input bertipe BIGINT, DOUBLE, DECIMAL, atau DATETIME, nilai tersebut akan dikonversi secara implisit menjadi tipe STRING sebelum perhitungan. Jika nilai input bertipe lain, kesalahan akan dikembalikan.
format: Wajib. Konstanta bertipe STRING. Parameter ini tidak mendukung EDTF. Jika nilai input bertipe lain, kesalahan akan dikembalikan. Jika string format redundan ada dalam format, fungsi ini mengonversi string tanggal yang sesuai dengan string format pertama menjadi nilai tanggal. String lainnya dianggap sebagai pemisah.
Nilai Kembali
Nilai bertipe BOOLEAN dikembalikan. Jika parameter input diatur ke NULL, NULL dikembalikan.
Contoh
-- Nilai kembali adalah true. isdate("1234-yyyy", "yyyy-yyyy");
TO_DATE
Sintaksis
datetime to_date(string <date>, string <format>)Deskripsi
Mengonversi string menjadi nilai tanggal dalam format tertentu.
Parameter
date: Wajib. Nilai bertipe STRING. Parameter ini menentukan string tanggal yang ingin dikonversi. Jika nilai input bertipe BIGINT, DOUBLE, DECIMAL, atau DATETIME, nilai tersebut akan dikonversi secara implisit menjadi tipe STRING sebelum perhitungan. Jika nilai input bertipe lain atau string kosong, kesalahan akan dikembalikan.
format: Wajib. Konstanta bertipe STRING. Parameter ini menentukan format tanggal. Jika nilai input bertipe lain, kesalahan akan dikembalikan. format tidak mendukung EDTF. Karakter lain diabaikan sebagai karakter tidak valid selama penguraian.
Nilai format harus mencakup
yyyy. Jika tidak,NULL dikembalikan. Jika string format redundan ada dalam format, fungsi ini mengonversi string tanggal yang sesuai dengan string format pertama menjadi nilai tanggal. String lainnya dianggap sebagai pemisah. Sebagai contoh,to_date("1234-2234", "yyyy-yyyy")mengembalikan1234-01-01 00:00:00.format terdiri dari berbagai komponen tanggal.
yyyymenunjukkan tahun 4 digit.mmmenunjukkan bulan 2 digit.ddmenunjukkan hari 2 digit.hhmenunjukkan jam berdasarkan sistem 24 jam.mimenunjukkan menit 2 digit.ssmenunjukkan detik 2 digit.ff3menunjukkan milidetik 3 digit.
Nilai Kembali
Nilai bertipe DATETIME dikembalikan. Nilai kembali dalam format
yyyy-mm-dd hh:mi:ss. Jika parameter input diatur ke NULL, NULL dikembalikan.Contoh
-- Nilai kembali adalah 2010-12-03 00:00:00. to_date('Test 2010-12*03', 'Test yyyy-mm*dd'); -- Nilai kembali adalah 2008-07-18 00:00:00. to_date('20080718', 'yyyymmdd'); -- Nilai kembali adalah 2008-07-18 20:30:00. to_date('200807182030','yyyymmddhhmi'); -- '2008718' tidak dapat dikonversi menjadi nilai tanggal standar, dan kesalahan dikembalikan. Nilai tersebut harus ditulis sebagai '20080718'. to_date('2008718', 'yyyymmdd'); -- 'Test2010-12*3' tidak dapat dikonversi menjadi nilai tanggal standar, dan kesalahan dikembalikan. Nilai tersebut harus ditentukan sebagai 'Test 2010-12*03'. to_date('Test 2010-12*3', 'Test yyyy-mm*dd'); -- '2010-24-01' tidak dapat dikonversi menjadi nilai tanggal standar, dan kesalahan dikembalikan. Nilai tersebut harus ditentukan sebagai '2010-01-24'. to_date('2010-24-01', 'yyyy'); -- Nilai kembali adalah 2018-10-30 15:13:12. to_date('20181030 15-13-12.345','yyyymmdd hh-mi-ss.ff3');
TO_CHAR
Sintaksis
string to_char(datetime <date>, string <format>)Deskripsi
Mengonversi nilai tanggal bertipe DATETIME menjadi string dalam format tertentu.
Parameter
date: Wajib. Nilai tanggal bertipe DATETIME. Parameter ini menentukan nilai tanggal yang ingin dikonversi. Jika nilai input bertipe STRING, nilai tersebut akan dikonversi secara implisit menjadi tipe DATETIME sebelum perhitungan. Jika nilai input bertipe lain, kesalahan akan dikembalikan.
format: Wajib. Konstanta bertipe STRING. Parameter ini menentukan format tanggal. Jika nilainya bukan konstanta atau bukan tipe STRING, kesalahan akan dikembalikan. Dalam parameter format, bagian format tanggal diganti dengan data terkait dan karakter lainnya tetap tidak berubah dalam output.
Nilai Kembali
Nilai bertipe STRING dikembalikan. Jika parameter input diatur ke NULL, NULL dikembalikan.
Contoh
-- Nilai kembali adalah 20080718. to_char(datetime'2008-07-18 00:00:00', 'yyyymmdd'); -- 'Test 2010-12*3' tidak dapat dikonversi menjadi nilai tanggal standar, dan kesalahan dikembalikan. Nilai tersebut harus ditentukan sebagai 'Test 2010-12*03'. to_char(datetime'Test 2010-12*3', 'Test yyyy-mm*dd'); -- '2010-24-01' tidak dapat dikonversi menjadi nilai tanggal standar, dan kesalahan dikembalikan. Nilai tersebut harus ditentukan sebagai '2010-01-24'. to_char(datetime'2010-24-01', 'yyyy'); -- '2008718' tidak dapat dikonversi menjadi nilai tanggal standar, dan kesalahan dikembalikan. Nilai tersebut harus ditentukan sebagai '20080718'. to_char(datetime'2008718', 'yyyymmdd');
UNIX_TIMESTAMP
Sintaksis
bigint unix_timestamp(datetime <date>)Deskripsi
Mengonversi nilai tanggal menjadi timestamp UNIX yang merupakan bilangan bulat.
Parameter
date: Wajib. Nilai bertipe DATETIME. Jika nilai input bertipe STRING, nilai tersebut akan dikonversi secara implisit menjadi tipe DATETIME sebelum perhitungan. Jika nilai input bertipe lain, kesalahan akan dikembalikan. Jika Anda mengaktifkan tipe data baru, konversi implisit gagal. Dalam hal ini, Anda harus memanggil fungsi
CASTuntuk mengonversi tipe data. Contoh:unix_timestamp(cast(... as datetime)).Nilai Kembali
Timestamp UNIX bertipe BIGINT dikembalikan. Jika parameter input adalah NULL, NULL dikembalikan.
Contoh
-- Nilai kembali adalah 1237518660. unix_timestamp(datetime'2009-03-20 11:11:00');
LAST_DAY
Sintaksis
string last_day(string <date>)Deskripsi
Mengembalikan hari terakhir dari bulan di mana nilai tanggal jatuh.
Parameter
date: Wajib. Nilai bertipe STRING. Format nilai tanggal harus mencakup setidaknya yyyy-mm-dd. Jika tidak, NULL dikembalikan.
Nilai Kembali
Nilai bertipe STRING dikembalikan. Nilai kembali dalam format
yyyy-mm-dd.Contoh
-- Nilai kembali adalah 2017-03-31. last_day('2017-03-04'); -- Nilai kembali adalah 2017-07-31. last_day('2017-07-04 11:40:00'); -- Nilai kembali adalah NULL. last_day('20170304');
Konversi antara tipe STRING dan tipe DATETIME
Saat melakukan konversi antara tipe STRING dan tipe DATETIME, format yyyy-mm-dd hh:mi:ss digunakan.
Unit waktu | String (tidak peka huruf besar/kecil) | Nilai valid |
Tahun | yyyy | 0001 - 9999 |
Bulan | mm | 01 - 12 |
Hari | dd | 01 - 28|29|30|31 |
Jam | hh | 00 - 23 |
Menit | mi | 00 - 59 |
Detik | ss | 00 - 59 |
Jika digit pertama dari rentang nilai setiap unit waktu adalah 0, 0 tidak dapat dihilangkan. Sebagai contoh,
2014-1-9 12:12:12adalah format DATETIME yang tidak valid dan tidak dapat dikonversi dari tipe STRING menjadi tipe DATETIME. Harus ditulis sebagai2014-01-09 12:12:12.Hanya tipe STRING yang memenuhi persyaratan format di atas yang dapat dikonversi menjadi tipe DATETIME. Sebagai contoh,
CAST("2013-12-31 02:34:34" AS DATETIME)mengonversi2013-12-31 02:34:34bertipe STRING menjadi tipe DATETIME. Demikian pula, jika Anda mengonversi nilai bertipe DATETIME menjadi nilai bertipe STRING, nilai setelah konversi secara otomatis direpresentasikan dalam formatyyyy-mm-dd hh:mi:ss.