Fungsi waktu Lindorm digunakan untuk mengonversi data antara tipe tertentu dan tipe TIMESTAMP serta menghitung selisih hari antara dua timestamp. Topik ini menjelaskan fungsi waktu yang didukung oleh Lindorm beserta cara penggunaannya.
Mesin dan versi yang berlaku
Fungsi waktu yang dijelaskan dalam topik ini hanya berlaku untuk LindormTable.
Versi LindormTable adalah 2.7.8 atau lebih baru. Untuk informasi tentang cara melihat atau memperbarui versi minor LindormTable, lihat Catatan Rilis LindormTable dan Tingkatkan Versi Mesin Minor Instance Lindorm.
Versi Lindorm SQL harus 2.8.7.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara melihat versi Lindorm SQL, lihat Versi SQL.
Fungsi waktu yang didukung
Tabel berikut menjelaskan fungsi waktu yang didukung oleh Lindorm.
Fungsi | Deskripsi |
Memformat timestamp dalam zona waktu sesi saat ini. | |
Mengonversi data dari tipe Number seperti BIGINT, INTEGER, SMALLINT, dan TINYINT menjadi timestamp dalam zona waktu sesi saat ini. Jika Anda menentukan dua parameter, format output didasarkan pada parameter kedua. | |
Menghitung selisih hari antara dua timestamp dalam zona waktu sesi saat ini. | |
Mengonversi timestamp atau string timestamp ke UNIX timestamp. Satuan: detik. |
DATE_FORMAT
Memformat timestamp dalam zona waktu sesi saat ini. Untuk informasi lebih lanjut tentang cara melihat dan menentukan zona waktu sesi, lihat Tentukan Zona Waktu untuk Koneksi LindormTable.
Sintaksis
DATE_FORMAT(TIMESTAMP ts, STRING format)Parameter
Parameter | Diperlukan | Deskripsi |
ts | Ya | Timestamp yang ingin Anda format. |
format | Ya | Spesifikasi format, seperti %<Huruf yang disimpan> atau %%. Lihat tabel berikut untuk spesifikasi format yang didukung. |
Tabel berikut menjelaskan spesifikasi format yang didukung, output, dan deskripsi output.
Spesifikasi format | Output | Deskripsi |
%a | Ming hingga Sab | Hari dalam seminggu, yang disingkat. |
%b | Jan hingga Des | Bulan, yang disingkat. |
%c | 0 hingga 12 | Bulan, yang merupakan nilai numerik. |
%D | 1st, 2nd, 3rd... | Hari dalam bulan, yang memiliki akhiran ordinal. |
%d | 00 hingga 31 | Hari dalam bulan, yang merupakan nilai numerik dua digit. |
%e | 00 hingga 31 | Hari dalam bulan, yang merupakan nilai numerik dua digit. |
%f | 000000 hingga 999999 | Jumlah mikrodetik. |
%H | 00 hingga 23 | Jam dalam sistem 24 jam, yang merupakan nilai numerik dua digit. |
%h | 01 hingga 12 | Jam dalam sistem 12 jam, yang merupakan nilai numerik dua digit. |
%I | 01 hingga 12 | Jam dalam sistem 12 jam, yang merupakan nilai numerik dua digit. |
%i | 00 hingga 59 | Menit, yang merupakan nilai numerik dua digit. |
%j | 001 hingga 366 | Hari dalam setahun, yang merupakan nilai numerik tiga digit. |
%k | 0 hingga 23 | Jam dalam sistem 24 jam, yang merupakan nilai numerik. |
%l | 1~ hingga 12 | Jam dalam sistem 12 jam, yang merupakan nilai numerik. |
%M | Januari hingga Desember | Bulan, yang mencakup nama lengkap. |
%m | 01 hingga 12 | Bulan, yang merupakan nilai numerik dua digit. |
%p | AM atau PM | Pagi atau sore. |
%r | hh:mm:ss AM/PM | Jam 12-jam dalam format hh:mm:ss, yang mencakup informasi pagi (AM) atau sore (PM). |
%S | 00 hingga 59 | Detik dalam jam, yang merupakan nilai numerik dua digit. |
%s | 00 hingga 59 | Detik dalam jam, yang merupakan nilai numerik dua digit. |
%T | hh:mm:ss | Jam 24-jam dalam format hh:mm:ss. |
%W | Minggu hingga Sabtu | Hari dalam seminggu, yang dalam nama lengkap. |
%w | 0 hingga 6 | Hari dalam seminggu, yang merupakan nilai numerik. Contohnya, |
%Y | Nilai numerik empat digit | Tahun. Contoh: |
%y | Nilai numerik dua digit berdasarkan dua digit terakhir tahun. | Tahun. Contohnya, nilai |
%% | % | Karakter %. |
%x | x | Huruf lain selain huruf yang disimpan yang terkandung dalam spesifikasi format sebelumnya. Contohnya, huruf U bukan huruf yang disimpan. Spesifikasi format %U mewakili huruf U. |
Jika Anda tidak mengonfigurasi spesifikasi format, semua karakter yang tidak dimulai dengan % akan dikembalikan dalam format aslinya.
Contoh
Memformat timestamp 2024-01-01 17:20:35 dalam zona waktu sesi saat ini sebagai at 17:20:35 on Jan 1st, 2024.
SELECT DATE_FORMAT('2024-01-01 17:20:35', 'at %T on %b %D, %Y');Output sampel:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 17:20:35 on JAN 1st, 2024 |
+------------------------------+Hasil yang dikembalikan adalah string yang formatnya didasarkan pada spesifikasi format. String tersebut mewakili timestamp dalam zona waktu sesi saat ini.
FROM_UNIXTIME
Mengonversi data dari tipe Number seperti BIGINT, INTEGER, SMALLINT, dan TINYINT menjadi timestamp dalam zona waktu sesi saat ini. Jika Anda menentukan dua parameter, format output didasarkan pada parameter kedua.
Nilai tipe Number dalam detik. Hingga tiga digit valid dipertahankan.
Sintaksis
Mengonversi data tipe Number menjadi timestamp dalam zona waktu sesi saat ini.
FROM_UNIXTIME (Number seconds)Mengonversi data tipe Number menjadi timestamp dalam zona waktu sesi saat ini, lalu memformat timestamp tersebut.
FROM_UNIXTIME (Number seconds, STRING format)
Parameter
Parameter | Diperlukan | Deskripsi |
seconds | Ya | Timestamp UNIX. Satuan: detik. Hingga tiga tempat desimal dipertahankan. Nilai parameter seconds menunjukkan jumlah detik yang telah berlalu sejak |
format | Tidak | Spesifikasi format. Untuk informasi lebih lanjut, lihat Parameter. |
Contoh
Contoh 1:
Mengonversi timestamp UNIX
10.1578menjadi timestamp dalam zona waktu sesi saat ini.SELECT FROM_UNIXTIME(10.1578);Output sampel:
+-------------------------+ | EXPR$0 | +-------------------------+ | 1970-01-01 08:00:10.158 | +-------------------------+Mengubah bidang time_zone menjadi
+03:00dan mengonversi timestamp UNIX10.1578menjadi timestamp dalam zona waktu baru.-- Ubah bidang time_zone menjadi +03:00. SET @@time_zone='+03:00'; -- Konversi ke timestamp dalam zona waktu baru. SELECT FROM_UNIXTIME(10.1578);CatatanHanya protokol MySQL yang memungkinkan Anda mengubah zona waktu koneksi. Untuk informasi lebih lanjut, lihat Gunakan Protokol MySQL untuk Mengembangkan Aplikasi (Disarankan) dan Gunakan Klien MySQL untuk Terhubung dan Menggunakan LindormTable.
Output sampel:
+-------------------------+ | EXPR$0 | +-------------------------+ | 1970-01-01 03:00:10.158 | +-------------------------+
Contoh 2:
Mengonversi timestamp UNIX
10.1578menjadi timestamp dalam zona waktu sesi saat ini lalu memformat timestamp tersebut.SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');Output sampel:
+------------------------------+ | EXPR$0 | +------------------------------+ | at 08:00:10 on JAN 1st, 1970 | +------------------------------+Mengubah bidang time_zone menjadi
+03:00, mengonversi timestamp UNIX10.1578menjadi timestamp dalam zona waktu baru, lalu memformat timestamp tersebut.-- Ubah bidang time_zone menjadi +03:00. SET @@time_zone='+03:00'; -- Konversi ke timestamp dalam zona waktu baru. SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');Output sampel:
+------------------------------+ | EXPR$0 | +------------------------------+ | at 03:00:10 on JAN 1st, 1970 | +------------------------------+
DATEDIFF
Menghitung selisih hari antara dua timestamp dalam zona waktu sesi saat ini.
Untuk menghitung selisih, Anda dapat mengurangi nilai timestamp kedua dari nilai timestamp pertama. Bagian berikut menjelaskan hasilnya:
Jika hasilnya positif, timestamp pertama mewakili tanggal yang lebih akhir.
Jika hasilnya negatif, timestamp pertama mewakili tanggal yang lebih awal.
Jika hasilnya
0, kedua timestamp jatuh pada hari yang sama.
Sistem secara otomatis hanya membandingkan nilai tanggal, tanpa memperhatikan informasi jam, menit, dan detik.
Sintaksis
DATEDIFF(TIMESTAMP ts1, TIMESTAMP ts2)Parameter
Parameter | Diperlukan | Deskripsi |
ts1 | Ya | Timestamp pertama. |
ts2 | Ya | Timestamp kedua. |
Contoh
Contoh 1:
SELECT DATEDIFF('2024-01-01 15:30:00', '2024-01-02 00:59:59');Output sampel:
+--------+ | EXPR$0 | +--------+ | -1 | +--------+Contoh 2:
SELECT DATEDIFF('2024-01-05 15:30:00', '2024-01-02 00:59:59');Output sampel:
+--------+ | EXPR$0 | +--------+ | 3 | +--------+Contoh 3:
SELECT DATEDIFF('2024-01-02 15:30:00', '2024-01-02 00:59:59');Output sampel:
+--------+ | EXPR$0 | +--------+ | 0 | +--------+
UNIX_TIMESTAMP
Mengonversi timestamp atau string timestamp menjadi UNIX timestamp hingga detik dan mengembalikan data tipe DOUBLE di kolom tertentu.
Ketika parameter ts menunjukkan timestamp, tiga tempat desimal dipertahankan dalam nilai yang dikembalikan. Ketika parameter ts menunjukkan string timestamp, string timestamp tersebut mewakili timestamp dalam zona waktu sesi saat ini dan enam tempat desimal dipertahankan dalam nilai yang dikembalikan.
Versi LindormTable harus 2.8.0 atau lebih baru dan versi Lindorm SQL harus 2.9.0.0 atau lebih baru. Anda dapat melihat versi LindormTable dan Lindorm SQL serta memperbarui versi minor LindormTable ke 2.8.0 atau lebih baru di konsol Lindorm.
Fungsi
UNIX_TIMESTAMPdapat digunakan dalam proyeksi dan klausa WHERE dari pernyataan SELECT dan juga dapat digunakan dalam klausa VALUES dari pernyataan UPSERT.
Sintaksis
UNIX_TIMESTAMP (ts)Parameter
Parameter | Diperlukan | Deskripsi |
ts | Ya | Timestamp dalam zona waktu sesi saat ini. Tipe data harus TIMESTAMP atau VARCHAR. |
Contoh
Buat tabel bernama t1. Contoh kode:
-- Buat tabel bernama t1.
CREATE TABLE t1(p1 INT, c1 TIMESTAMP, c2 VARCHAR, c3 DOUBLE, PRIMARY KEY(p1));
-- Masukkan data ke dalam tabel.
UPSERT INTO t1(p1, c1, c2, c3) VALUES
(1, '2025-01-01 08:30:00', '2025-01-01 08:30:00', '12.24'),
(2, '1970-01-01 08:00:00.123', '1970-01-01 08:00:00.123', '10.32'),
(3, '1970-01-01 08:00:10.13579', '1970-01-01 08:00:10.13579', '10.12'),
(4, '1970-01-01 08:00:10.123456789', '1970-01-01 08:00:10.123456789', '17.33');Contoh 1: Kueri UNIX timestamp yang sesuai dengan timestamp atau string timestamp.
SELECT p1, UNIX_TIMESTAMP(c1), UNIX_TIMESTAMP(c2) FROM t1;Output sampel:
+----+------------+------------+ | p1 | EXPR$1 | EXPR$2 | +----+------------+------------+ | 1 | 1735691400 | 1735691400 | | 2 | 0.123 | 0.123 | | 3 | 10.135 | 10.13579 | | 4 | 10.123 | 10.123457 | +----+------------+------------+Contoh 2: Hitung jumlah rekaman yang memenuhi kondisi
UNIX_TIMESTAMP(c1) > 10.SELECT COUNT(*) FROM t1 WHERE UNIX_TIMESTAMP(c1) > 10;Output sampel:
+--------+ | EXPR$0 | +--------+ | 3 | +--------+Contoh 3: Tulis hasil fungsi
UNIX_TIMESTAMPke kolomc3yang bertipe data DOUBLE.UPSERT INTO t1(p1, c3) VALUES(1, UNIX_TIMESTAMP('1970-01-01 08:00:00.123'));Verifikasi Hasil
Anda dapat mengeksekusi pernyataan
SELECT * FROM t1untuk memeriksa apakah operasi penulisan berhasil.