全部产品
Search
文档中心

Hologres:Fungsi Tanggal dan Waktu

更新时间:Nov 10, 2025

Topik ini menjelaskan fungsi tanggal dan waktu yang didukung oleh Hologres serta memberikan contoh penggunaannya.

Tipe

Fungsi

Fitur

Fungsi konversi tipe data

MAKE_DATE

Membuat tanggal dari tahun, bulan, dan hari. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

TO_CHAR

Mengonversi timestamp, integer, bilangan real, atau bilangan presisi ganda menjadi string.

TO_DATE

Mengonversi string menjadi tanggal. Secara default, hanya string dalam rentang tahun 1925 hingga 2282 yang dapat dikonversi.

TO_TIMESTAMP

Mengonversi string menjadi timestamp atau timestamp menjadi tanggal.

Fungsi dan operator untuk operasi dasar pada nilai tanggal dan waktu

ADD_MONTHS

Menambahkan sejumlah bulan tertentu ke tanggal yang ditentukan. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

DATEADD

Menambahkan atau mengurangi interval ke atau dari nilai tanggal dan waktu berdasarkan unit waktu yang ditentukan. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

DATEDIFF

Menghitung perbedaan antara dua tanggal atau timestamp. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

MONTHS_BETWEEN

Mengembalikan jumlah bulan antara dua tanggal. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

NEXT_DAY

Mengembalikan tanggal hari pertama yang ditentukan setelah tanggal tertentu. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

Penambahan tanggal atau waktu: operator +

Menambahkan hari atau waktu.

Pengurangan tanggal atau waktu: operator -

Mengurangi hari atau waktu.

Perkalian tanggal atau waktu: operator *

Mengalikan hari atau waktu.

Pembagian tanggal atau waktu: operator /

Membagi hari atau waktu.

Fungsi pemotongan tanggal dan waktu

DATE_PART

Mengekstrak bagian tertentu, seperti bagian tahun, bulan, hari, atau jam, dari timestamp. Fungsi ini setara dengan fungsi EXTRACT.

DATE_TRUNC

Memotong data tanggal dan waktu ke unit waktu yang ditentukan.

EXTRACT

Mengekstrak bagian tertentu, seperti bagian tahun, bulan, hari, atau jam, dari timestamp.

LAST_DAY

Mengembalikan hari terakhir dari bulan di mana nilai tanggal jatuh. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

ORACLE_LAST_DAY

Mengembalikan hari terakhir dari bulan di mana nilai tanggal jatuh. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

ROUND

Membulatkan tanggal ke nilai terdekat berdasarkan unit waktu. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

TRUNC

Memotong tanggal atau timestamp ke unit waktu yang ditentukan. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

Fungsi pengambilan tanggal dan waktu saat ini

CLOCK_TIMESTAMP

Mengembalikan tanggal dan waktu saat ini.

CURRENT_DATE

Mengembalikan tanggal saat ini.

CURRENT_TIMESTAMP

Mengembalikan waktu mulai transaksi saat ini. Fungsi ini setara dengan fungsi TRANSACTION_TIMESTAMP atau NOW.

LOCALTIMESTAMP

Mengembalikan waktu saat ini tanpa informasi zona waktu.

NOW

Mengembalikan waktu mulai transaksi saat ini. Fungsi ini setara dengan fungsi TRANSACTION_TIMESTAMP atau CURRENT_TIMESTAMP.

STATEMENT_TIMESTAMP

Mengembalikan waktu mulai pernyataan saat ini.

TIMEOFDAY

Mengembalikan tanggal dan waktu saat ini. Fungsi ini mirip dengan fungsi CLOCK_TIMESTAMP. Nilai yang dikembalikan oleh fungsi TIMEOFDAY adalah string teks yang diformat.

TRANSACTION_TIMESTAMP

Mengembalikan waktu mulai transaksi saat ini. Fungsi ini setara dengan fungsi CURRENT_TIMESTAMP atau NOW.

Lainnya

ISFINITE

Memeriksa apakah tanggal bertipe DATE merupakan angka terbatas.

Fungsi konversi tanggal dan waktu

TO_CHAR

  • Deskripsi:

    • Mengonversi timestamp menjadi string. Secara default, hanya timestamp dalam rentang tahun 1925 hingga 2282 yang dapat dikonversi.

      TO_CHAR(TIMESTAMP|TIMESTAMPTZ, TEXT)

      Catatan penggunaan:

      • Anda dapat menggunakan fungsi ini untuk mengonversi timestamp menjadi string dalam format 24 jam atau 12 jam. HH24 menunjukkan format 24 jam, dan HH12 menunjukkan format 12 jam. Secara default, format 12 jam digunakan.

      • YYYY sesuai dengan tahun, MM ke bulan, DD ke hari, HH ke jam, MI ke menit, dan SS ke detik.

      • Mulai dari Hologres V1.1.31, Anda dapat menjalankan set hg_experimental_functions_use_pg_implementation = 'to_char'; atau set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp'; sebelum pernyataan SQL untuk mendukung semua rentang waktu.

        Catatan

        Jika Anda menjalankan salah satu pernyataan tersebut untuk mengonfigurasi parameter GUC, kinerja query akan menurun sekitar 50%. Pada Hologres V1.1.42 dan versi lebih baru, kinerja query menurun sekitar 20%.

    • Mengonversi integer menjadi string.

      TO_CHAR(INT, TEXT)
    • Mengonversi bilangan real atau bilangan presisi ganda menjadi string.

      TO_CHAR(DOUBLE PRECISION, TEXT)
  • Nilai Kembali:

    Nilai bertipe TEXT dikembalikan.

  • Contoh:

    • Mengonversi timestamp menjadi string dalam format 24 jam.

      -- Hasil yang dikembalikan: 13:48:30.
      SELECT TO_CHAR(current_timestamp, 'HH24:MI:SS');
      
      -- Hasil yang dikembalikan: 2024-08-05.
      SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD');
    • Mengonversi timestamp menjadi string dalam format 12 jam.

      -- Hasil yang dikembalikan: 01:50:42 PM.
      SELECT TO_CHAR(current_timestamp, 'HH12:MI:SS AM');
      
      -- Hasil yang dikembalikan: 12:30:00 AM.
      SELECT TO_CHAR(time '00:30:00', 'HH12:MI:SS AM');
    • Mengonversi nilai timestamp dari sebuah kolom menjadi string.

      CREATE TABLE time_test(
        a text,
        b TIMESTAMPTZ );
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00','2004-10-19 10:23:54+08');
      
      -- Hasil yang dikembalikan: 10:23:54.
      SELECT TO_CHAR(b, 'HH24:MI:SS') FROM time_test;
      
      -- Mengonversi nilai bertipe TEXT menjadi tanggal. Hasil yang dikembalikan: 2001-09-28.
      SELECT TO_CHAR(to_timestamp(a, 'YYYY-MM-DD'),'YYYY-MM-DD')FROM time_test;
    • Mengonversi timestamp menjadi string di zona waktu lain.

      CREATE TABLE timestamptz_test(
        a TIMESTAMPTZ);
      
      INSERT INTO timestamptz_test VALUES ('2023-03-21 10:23:54+02');
      • Jika tidak ada zona waktu yang ditentukan, nilai timestamp dari kolom a akan dikonversi menjadi string menggunakan zona waktu UTC+8.

        -- Hasil yang dikembalikan: 2023-03-21 16:23:54.
        SELECT TO_CHAR(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
      • Mengonversi nilai timestamp dari kolom a menjadi string yang menggunakan zona waktu UTC-5.

        -- Hasil yang dikembalikan: 2023-03-21 04:23:54.
        SELECT TO_CHAR(a at time zone 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
    • Mengonversi integer menjadi string.

      -- Hasil yang dikembalikan: 125.
      SELECT TO_CHAR(125, '999');
    • Mengonversi bilangan presisi ganda menjadi string.

      -- Hasil yang dikembalikan: 125.8.
      SELECT TO_CHAR(125.8::real, '999D9');

TO_DATE

  • Deskripsi: Mengonversi string menjadi tanggal. Secara default, hanya string dalam rentang tahun 1925 hingga 2282 yang dapat dikonversi.

    TO_DATE(<text_date> TEXT, <format_mask> TEXT)
  • Catatan penggunaan:

    Mulai dari Hologres V1.1.31, Anda dapat menjalankan set hg_experimental_functions_use_pg_implementation = 'to_date'; atau set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp'; sebelum pernyataan SQL untuk mendukung semua rentang waktu.

    Catatan

    Jika Anda menjalankan salah satu pernyataan tersebut untuk mengonfigurasi parameter GUC, kinerja query akan menurun sekitar 50%. Pada Hologres V1.1.42 dan versi lebih baru, kinerja query menurun sekitar 20%.

  • Parameter:

    • text_date: wajib. String yang ingin Anda konversi.

    • format_mask: wajib. Format tanggal.

  • Nilai kembali:

    Nilai bertipe TEXT dikembalikan.

  • Contoh:

    • Mengonversi string menjadi tanggal.

      -- Hasil yang dikembalikan: 2000-12-05.
      SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY');
      
      -- Hasil yang dikembalikan: 2001-03-24.
      SELECT TO_DATE('2001 03 24', 'YYYY-MM-DD');
    • Mengonversi nilai kolom bertipe TEXT menjadi tanggal.

      CREATE TABLE time_test(a TEXT);
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
      SELECT TO_DATE(a, 'YYYY-MM-DD') FROM time_test;

      Hasil berikut dikembalikan:

        to_date
      ------------
       2001-09-28

TO_TIMESTAMP

  • Deskripsi:

    • Mengonversi string menjadi timestamp. Secara default, hanya string dalam rentang tahun 1925 hingga 2282 yang dapat dikonversi.

      TO_TIMESTAMP(<text_date> TEXT, <format_mask> TEXT)
      • Catatan penggunaan:

        • Nilai kembali mencakup +08.

        • Mulai dari Hologres V1.1.31, Anda dapat menjalankan set hg_experimental_functions_use_pg_implementation = 'to_timestamp'; atau set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp'; sebelum pernyataan SQL untuk mendukung semua rentang waktu.

          Catatan

          Jika Anda menjalankan salah satu pernyataan tersebut untuk mengonfigurasi parameter GUC, kinerja query akan menurun sekitar 50%. Pada Hologres V1.1.42 dan versi lebih baru, kinerja query menurun sekitar 20%.

      • Parameter:

        • text_date: wajib. String yang ingin Anda konversi menjadi timestamp.

        • format_mask: wajib. Format timestamp.

    • Mengonversi timestamp menjadi tanggal.

      TO_TIMESTAMP(DOUBLE PRECISION)
      Catatan

      Timestamp UNIX mewakili jumlah detik yang telah berlalu sejak 00:00:00, 1 Januari 1970.

  • Nilai kembali:

    Nilai bertipe TIMESTAMPTZ dikembalikan.

  • Contoh:

    • Mengonversi string menjadi timestamp.

      SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');

      Hasil berikut dikembalikan:

            to_timestamp
      ------------------------
       2000-12-05 00:00:00+08
    • Mengonversi string bertipe TEXT menjadi timestamp.

      CREATE TABLE time_test(a TEXT);
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
      SELECT TO_TIMESTAMP(a, 'YYYY-MM-DD') FROM time_test;

      Hasil berikut dikembalikan:

            to_timestamp
      ------------------------
       2001-09-28 00:00:00+08
    • Mengonversi timestamp UNIX dalam detik menjadi tanggal.

      -- Hasil yang dikembalikan: 1975-03-06 03:38:16+08.
      SELECT TO_TIMESTAMP(163280296);
    • Mengonversi timestamp UNIX dalam milidetik menjadi tanggal.

      -- Hasil yang dikembalikan: 2021-09-28 12:22:41+08.
      SELECT TO_TIMESTAMP(1632802961000/1000);

MAKE_DATE

  • Deskripsi: Membuat tanggal dari tahun, bulan, dan hari. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

    MAKE_DATE(<year> INT, <month> INT, <day> INT)
  • Catatan penggunaan:

    Hologres V2.0.29 dan versi lebih baru mendukung fungsi ini. Fungsi ini tidak mendukung konstanta sebagai parameter input.

  • Nilai kembali:

    Nilai bertipe DATE dikembalikan.

  • Contoh:

    -- Hasil yang dikembalikan: 2013-07-15.
    SELECT MAKE_DATE(2013, 7, 15);

    Hasil berikut dikembalikan:

    make_date
    ------------
     2013-07-15

Fungsi dan operator untuk operasi dasar pada nilai tanggal dan waktu

DATEADD

  • Deskripsi: Menambahkan atau mengurangi interval ke atau dari nilai tanggal dan waktu tertentu berdasarkan unit waktu yang ditentukan. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

    DATEADD(<d> DATE|TIMESTAMP|TIMESTAMPTZ, <num> BIGINT, <str> TEXT)
  • Catatan penggunaan:

    Instansi Hologres dengan versi berikut mendukung fungsi ini:

    • V2.0.31 hingga V2.1.0

    • V2.1.13 dan versi lebih baru

    Catatan

    Fungsi ini tidak mendukung semua parameter input sebagai konstanta.

  • Parameter:

    • d: wajib. Nilai tanggal dan waktu asli.

    • num: wajib. Interval yang ingin Anda tambahkan atau kurangi.

    • str: wajib. Unit waktu yang ditentukan. Nilai valid: yyyy, year, mm, month, mon, dd, day, hh, hour, mi, dan ss.

  • Nilai kembali:

    Nilai bertipe DATE, TIMESTAMP, atau TIMESTAMPTZ dikembalikan.

  • Contoh:

    CREATE TABLE test_dateadd (a TIMESTAMP);
    INSERT INTO test_dateadd VALUES ('2005-02-28 00:00:00');
    
    -- Menambahkan satu bulan ke nilai tanggal dan waktu yang ditentukan.
    SELECT DATEADD(a , 1, 'mm') FROM test_dateadd;

    Hasil berikut dikembalikan:

           dateadd
    ---------------------
     2005-03-28 00:00:00

ADD_MONTHS

  • Deskripsi: Menambahkan sejumlah bulan tertentu ke nilai tanggal dan waktu tertentu. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

    ADD_MONTHS(<d> DATE, <month> INT)
  • Parameter:

    • d: wajib. Tanggal asli.

    • month: wajib. Bilangan bulat yang ingin Anda tambahkan ke tanggal asli.

  • Nilai kembali:

    Nilai bertipe DATE dikembalikan.

  • Contoh:

    SELECT ADD_MONTHS(current_date, 2);

    Hasil berikut dikembalikan:

     add_months
    ------------
     2024-10-05

DATEDIFF

  • Deskripsi: Menghitung perbedaan antara dua tanggal atau timestamp. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

    DATEDIFF(<d1> DATE|TIMESTAMP|TIMESTAMPTZ, <d2> DATE|TIMESTAMP|TIMESTAMPTZ, <str> TEXT)
  • Catatan penggunaan:

    Instansi Hologres dengan versi berikut mendukung fungsi ini:

    • V2.0.31 hingga V2.1.0

    • V2.1.13 dan versi lebih baru

    Catatan

    Parameter input fungsi ini tidak dapat semuanya berupa konstanta.

  • Parameter:

    • d1: wajib. Tanggal atau timestamp pertama.

    • d2: wajib. Tanggal atau timestamp kedua.

    • str: wajib. Unit waktu berdasarkan mana selisih waktu dihitung. Nilai valid: yyyy, year, mm, month, mon, dd, day, hh, hour, mi, dan ss.

  • Nilai kembali:

    Nilai bertipe BIGINT dikembalikan. Jika selisih waktu dalam unit waktu yang ditentukan kurang dari 1, nilai 0 akan dikembalikan secara default.

    Sebagai contoh, jika Anda menggunakan fungsi ini untuk menghitung selisih antara 2023-12-31 dan 2024-01-01 berdasarkan unit waktu tahun, nilai 0 akan dikembalikan.

    Catatan

    Jika Anda ingin fungsi tersebut mengembalikan 1 dalam skenario sebelumnya, jalankan set hg_experimental_datediff_use_presto_impl = off; sebelum pernyataan SQL untuk menonaktifkan parameter GUC ini.

  • Contoh:

    CREATE TABLE test_datediff (a TIMESTAMP);
    INSERT INTO test_datediff VALUES ('2005-02-28 00:00:00');
    
    -- Menghitung selisih dalam menit antara dua tanggal.
    SELECT DATEDIFF(a , '2005-03-02 00:00:00', 'mi') FROM test_datediff;

    Hasil berikut dikembalikan:

     datediff
    ----------
        -2880

MONTHS_BETWEEN

  • Deskripsi: Mengembalikan jumlah bulan antara dua tanggal. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

    MONTHS_BETWEEN(DATE, DATE)
  • Nilai kembali:

    Nilai bertipe INT dikembalikan.

  • Contoh:

    • Contoh 1:

      -- Hasil yang dikembalikan: 2.
      SELECT MONTHS_BETWEEN('2022-01-01', '2021-11-01');
    • Contoh 2:

      -- Hasil yang dikembalikan: -2.
      SELECT MONTHS_BETWEEN('2021-11-01', '2022-01-01');

NEXT_DAY

  • Deskripsi: Mengembalikan tanggal hari pertama yang ditentukan setelah tanggal tertentu. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

    NEXT_DAY(<d> DATE, <str> TEXT|INT)
  • Parameter:

    • d: wajib. Tanggal yang ditentukan.

    • str: wajib. String yang mewakili hari dalam seminggu. Contoh: Friday. Parameter ini juga dapat diatur ke angka yang mewakili hari dalam seminggu. Angka berkisar dari 1 hingga 7. Nilai 1 menunjukkan Minggu, dan nilai 2 menunjukkan Senin. Dengan cara serupa, nilai 7 menunjukkan Sabtu.

  • Nilai kembali:

    Nilai bertipe DATE dikembalikan.

  • Contoh:

    • Contoh 1:

      -- Hasil yang dikembalikan: 2022-05-06.
      SELECT NEXT_DAY('2022-05-01', 'FRIDAY');
    • Contoh 2:

      -- Hasil yang dikembalikan: 2022-05-06.
      SELECT NEXT_DAY('2022-05-01', 5);

Penambahan tanggal dan waktu: +

Tipe nilai kembali

Contoh

Hasil yang dikembalikan

DATE

Menambahkan tujuh hari ke tanggal tertentu.

SELECT date '2001-09-28' + integer '7';

2001-10-05

Menambahkan tiga hari ke tanggal saat ini.

SELECT current_date+ integer '3 ';

2022-12-10

Menambahkan satu hari ke waktu saat ini.

SELECT to_char(current_date+ interval '1 day','yyyy-mm-dd');

2022-12-09

TIMESTAMP

Menambahkan tiga jam ke tanggal tertentu. Waktu dimulai dari 00:00:00.

SELECT date '2001-09-28' + time '03:00';

2001-09-28 03:00:00

Menambahkan satu jam ke tanggal tertentu. Waktu dimulai dari 00:00:00.

SELECT date '2001-09-28' + interval '1 hour';

2001-09-28 01:00:00

TIMESTAMPTZ

Menambahkan satu hari ke waktu saat ini.

SELECT now()+interval '1 day';

2022-12-08 20:09:19.388465+08

Menambahkan satu bulan ke waktu saat ini.

SELECT now()+interval '1 month';

2023-01-08 20:21:50.993481+08

Menambahkan dua tahun ke waktu saat ini.

 SELECT now()+interval '2 year';

2024-12-08 20:22:49.416343+08

Pengurangan tanggal dan waktu: -

Tipe nilai kembali

Contoh

Hasil yang dikembalikan

INTEGER

Mengurangkan tanggal tertentu dari tanggal lain yang ditentukan.

SELECT date '2001-10-01' - date '2001-09-28';

3

DATE

Mengurangkan tujuh hari dari tanggal tertentu.

SELECT date '2001-10-01' - integer '7';

2001-09-24

TIMESTAMP

Mengurangkan tiga jam dari tanggal tertentu.

SELECT date '2001-09-28' - time '03:00';

2001-09-27 21:00:00

Mengurangkan satu jam dari tanggal tertentu.

 SELECT date '2001-09-28' - interval '1 hour';

2001-09-27 23:00:00

Mengurangkan dua hari dari waktu saat ini.

SELECT now()-interval '2 day';

2022-12-06 20:27:21.094258+08

Perkalian tanggal dan waktu: *

Tipe nilai kembali

Contoh

Hasil yang dikembalikan

INTERVAL

Pengali waktu

SELECT 21 * interval '3 day';

0 tahun 0 mons 63 hari 0 jam 0 mins 0.0 detik

Pembagian tanggal dan waktu: /

Tipe nilai kembali

Contoh

Hasil yang dikembalikan

INTERVAL

Pembagian waktu

SELECT interval '1 hour' / double precision '1.5';

0 tahun 0 mons 0 hari 0 jam 40 mins 0.0 detik

Fungsi pemotongan tanggal dan waktu

LAST_DAY

  • Deskripsi: Mengembalikan hari terakhir dari bulan di mana nilai tanggal jatuh. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung.

    LAST_DAY(DATE|TIMESTAMP|TIMESTAMPTZ)
  • Catatan penggunaan:

    Instansi Hologres dengan versi berikut mendukung fungsi ini:

    Catatan

    Fungsi ini tidak mendukung konstanta sebagai parameter input.

    • V2.0.31 hingga V2.1.0

    • V2.1.13 dan versi lebih baru

  • Nilai kembali:

    Nilai bertipe DATE dikembalikan.

  • Contoh:

    Ambil hari terakhir dari bulan untuk 2004-02-28 00:00:00.

    CREATE TABLE test_last_day (a TIMESTAMP);
    INSERT INTO test_last_day VALUES ('2004-02-28 00:00:00');
    
    SELECT LAST_DAY(a) FROM test_last_day;

    Hasil berikut dikembalikan:

      last_day
    ------------
     2004-02-29

ORACLE_LAST_DAY

  • Deskripsi: Mengembalikan hari terakhir dari bulan di mana nilai tanggal jatuh. Secara default, hanya nilai dalam rentang tahun 1925 hingga 2282 yang didukung. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

    ORACLE_LAST_DAY(DATE)
  • Nilai kembali:

    Nilai bertipe DATE dikembalikan.

  • Contoh:

    SELECT ORACLE_LAST_DAY('2022-05-01');

    Hasil berikut dikembalikan:

     oracle_last_day
    -----------------
     2022-05-31

EXTRACT

  • Deskripsi: Mengekstrak bagian tertentu, seperti tahun, bulan, hari, atau jam, dari ekspresi tanggal dan waktu (timestamp).

    EXTRACT(field FROM TIMESTAMP)
    Catatan

    Konstanta input untuk parameter bidang meliputi century, day, decade, dow (hari dalam seminggu, dengan Minggu sebagai 0), isodow (hari dalam seminggu, dengan Minggu sebagai 7), doy (hari dalam setahun), epoch, hour, minute, month, quarter, second, week, dan year.

  • Nilai kembali

    Nilai bertipe DOUBLE PRECISION dikembalikan.

  • Contoh

    • Mengekstrak bagian jam dari timestamp.

      -- Hasil yang dikembalikan: 20.
      SELECT EXTRACT(hour FROM timestamp '2001-02-16 20:38:40');
    • Mengekstrak bagian menit dari waktu saat ini.

      -- Hasil yang dikembalikan: 12.
      SELECT EXTRACT(minute FROM NOW());
    • Mengekstrak jumlah detik dari 1970 hingga waktu yang ditentukan oleh nilai sebuah kolom.

      CREATE TABLE time_test(a TEXT);
      INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
      SELECT EXTRACT(epoch FROM to_timestamp(a, 'YYYY-MM-DD')) FROM time_test;

      Hasil berikut dikembalikan:

       date_part
      ------------
       1001606400
  • Kompatibilitas: Mulai dari Hologres V4.0, fungsi pemotongan tanggal dan waktu berikut didukung untuk memberikan kompatibilitas yang lebih baik dengan ClickHouse dan Doris. Fungsi-fungsi ini tidak mendukung konstanta sebagai parameter input.

    Nama Fungsi

    Tipe Kembali

    Deskripsi

    • extract_century(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(century from timestamp), tetapi dengan performa yang lebih baik.

    • extract_day(timestamp)

    • toDayOfMonth(timestamp)

    • day(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(day from timestamp), tetapi dengan performa yang lebih baik.

    • extract_decade(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(decade from timestamp), tetapi dengan performa yang lebih baik.

    • extract_dow(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(dow from timestamp), tetapi dengan performa yang lebih baik.

    • extract_doy(timestamp)

    • toDayOfYear(timestamp)

    • dayofyear(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(doy from timestamp), tetapi dengan performa yang lebih baik.

    • extract_hour(timestamp)

    • toHour(timestamp)

    • hour(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(hour from timestamp), tetapi dengan performa yang lebih baik.

    • extract_isodow(timestamp)

    • dayofweek_iso(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(isodow from timestamp), tetapi dengan performa yang lebih baik.

    • extract_minute(timestamp)

    • toMinute(timestamp)

    • minute(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(minute from timestamp), tetapi dengan performa yang lebih baik.

    • extract_month(timestamp)

    • toMonth(timestamp)

    • month(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(month from timestamp), tetapi dengan performa yang lebih baik.

    • extract_quarter(timestamp)

    • toQuarter(timestamp)

    • quarter(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(quarter from timestamp), tetapi dengan performa yang lebih baik.

    • extract_second(timestamp)

    • toSecond(timestamp)

    • second(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(second from timestamp), tetapi dengan performa yang lebih baik.

    • extract_isoweek(timestamp)

    • toIsoWeek(timestamp)

    • week_iso(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(week from timestamp), tetapi dengan performa yang lebih baik.

    • extract_year(timestamp)

    • toYear(timestamp)

    • year(timestamp)

    DOUBLE PRECISION

    Semantik sama dengan extract(year from timestamp), tetapi dengan performa yang lebih baik.

DATE_PART

  • Deskripsi: Mengekstrak bagian tertentu, seperti bagian tahun, bulan, hari, atau jam, dari timestamp. Fungsi ini setara dengan fungsi EXTRACT.

    DATE_PART(<str> TEXT, <d> TIMESTAMP)
  • Parameter:

    • str: wajib. Bagian yang ingin Anda ekstrak. Nilai valid: century, day, decade, dow (hari dalam seminggu, dengan Minggu sebagai 0), isodow (hari dalam seminggu, dengan Minggu sebagai 7), doy (hari dalam setahun), epoch (jumlah hari sejak Unix epoch), hour, minute, month, quarter, second, week, dan year.

    • d: wajib. Ekspresi tanggal dan waktu.

  • Nilai kembali:

    Nilai bertipe DOUBLE PRECISION dikembalikan.

  • Contoh:

    • Contoh 1: Mengekstrak bagian jam dari timestamp.

      SELECT DATE_PART('hour', timestamp '2001-02-16 16:38:40');

      Hasil berikut dikembalikan:

       date_part
      -----------
              16
    • Contoh 2: Mengekstrak jumlah minggu dari 1 Januari hingga tanggal tertentu.

      SELECT DATE_PART('week', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

      Hasil berikut dikembalikan:

       date_part
      -----------
              41
    • Contoh 3: Mengekstrak jumlah bulan dari 1 Januari hingga tanggal tertentu.

      SELECT DATE_PART('month', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

      Hasil berikut dikembalikan:

       date_part
      -----------
              10

DATE_TRUNC

  • Deskripsi: Memotong data tanggal dan waktu ke unit waktu yang ditentukan.

    DATE_TRUNC(<str> TEXT, <d> TIME|TIMESTAMP|TIMESTAMPTZ)
  • Parameter:

    • str: wajib. Unit waktu. Nilai valid: century, decade, year, quarter, month, week, day, hour, minute, dan second.

    • d: wajib. Data tanggal dan waktu yang ingin Anda potong.

  • Nilai kembali:

    Nilai bertipe TIMESTAMP atau TIMESTAMPTZ dikembalikan.

  • Contoh:

    • Contoh 1: Memotong timestamp tertentu ke bagian jam.

      SELECT DATE_TRUNC('hour', time '12:38:40');

      Hasil berikut dikembalikan:

       date_trunc
      ------------
       12:00:00
    • Contoh 2: Memotong timestamp tertentu ke bagian hari.

      SELECT DATE_TRUNC('day', timestamptz'2001-02-16 20:38:40+08');

      Hasil berikut dikembalikan:

             date_trunc
      ------------------------
       2001-02-16 00:00:00+08
    • Contoh 3: Memotong timestamp tertentu ke bagian bulan.

      SELECT DATE_TRUNC('month', timestamp '2001-02-16 18:38:40');

      Hasil berikut dikembalikan:

           date_trunc
      ---------------------
       2001-02-01 00:00:00
    • Contoh 4: Memotong timestamp saat ini ke bagian bulan dan menambahkan 12 jam untuk mengembalikan 12:00:00 pada hari pertama bulan saat ini.

      SELECT DATE_TRUNC('month',now()) +interval '12h';

      Hasil berikut dikembalikan:

              ?column?
      ---------------------
       2024-08-01 12:00:00+08
    • Contoh 5: Memotong timestamp saat ini ke bagian hari dan menambahkan 9 jam untuk mengembalikan 09:00:00 pada hari saat ini.

      SELECT DATE_TRUNC('day',now()) + interval '9h';

      Hasil berikut dikembalikan:

              ?column?
      ------------------------
       2024-08-08 09:00:00+08
    • Contoh 6: Mengekstrak hari yang sama dalam seminggu.

      SELECT DATE_TRUNC('day',now()) + interval '7d';

      Hasil berikut dikembalikan:

              ?column?
      ------------------------
       2024-08-15 00:00:00+08

TRUNC

  • Deskripsi: Memotong tanggal atau timestamp ke unit waktu yang ditentukan. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

    TRUNC(<d> DATE|TIMESTAMP [, <str> TEXT])
  • Parameter:

    • d: wajib. Nilai tanggal dan waktu yang ingin Anda potong. Jika Anda menentukan nilai bertipe TIMESTAMPTZ, sisa bagiannya disetel ke 0.

    • str: opsional. Unit waktu. Jika Anda tidak mengonfigurasi parameter ini, tanggal asli akan dikembalikan. Anda dapat menyetel parameter ini ke Y atau Q. Nilai Y menunjukkan hari pertama tahun tersebut, dan nilai Q menunjukkan hari pertama kuartal tersebut. Untuk informasi lebih lanjut, lihat Dokumentasi Oracle.

  • Nilai kembali:

    Nilai bertipe DATE atau TIMESTAMPTZ dikembalikan.

  • Contoh:

    • Contoh 1:

      SELECT TRUNC('2022-05-22'::date,'Y');

      Hasil berikut dikembalikan:

         trunc
      ------------
       2022-01-01
    • Contoh 2:

      SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Y');

      Hasil berikut dikembalikan:

              trunc
      ---------------------
       2022-01-01 00:00:00
    • Contoh 3:

      SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Q');

      Hasil berikut dikembalikan:

              trunc
      ---------------------
       2022-04-01 00:00:00
    • Contoh 4:

      SELECT TRUNC('2022-05-22 13:11:22'::timestamp);

      Hasil berikut dikembalikan:

              trunc
      ---------------------
       2022-05-22 00:00:00

ROUND

  • Deskripsi: Membulatkan tanggal ke nilai terdekat berdasarkan unit waktu. Fungsi ini kompatibel dengan Oracle. Sebelum menggunakan fungsi ini, Anda harus menginstal ekstensi Orafce. Untuk informasi lebih lanjut, lihat Fungsi Oracle yang didukung.

    ROUND(<d> DATE|TIMESTAMPTZ [, <str> TEXT])
  • Parameter:

    • d: wajib. Tanggal yang ingin Anda bulatkan. Jika Anda menentukan nilai bertipe TIMESTAMPTZ, sisa bagiannya disetel ke 0.

    • str: opsional. Unit waktu. Jika Anda tidak mengonfigurasi parameter ini, fungsi ini membulatkan tanggal ke hari terdekat. Anda dapat menyetel parameter ini ke Y, yang menunjukkan hari pertama tahun terdekat. Untuk informasi lebih lanjut, lihat Dokumentasi Oracle.

  • Nilai kembali:

    Nilai bertipe DATE atau TIMESTAMPTZ dikembalikan.

  • Contoh:

    • Contoh 1:

      SELECT ROUND('2022-05-22'::date,'Y');

      Hasil berikut dikembalikan:

         round
      ------------
       2022-01-01
    • Contoh 2:

      SELECT ROUND('2022-07-22'::date,'Y');

      Hasil berikut dikembalikan:

         round
      ------------
       2023-01-01
    • Contoh 3:

      SELECT ROUND('2022-07-22 13:11:22'::timestamp,'Y');

      Hasil berikut dikembalikan:

              round
      ---------------------
       2023-01-01 00:00:00
    • Contoh 4:

      SELECT ROUND('2022-02-22 13:11:22'::timestamp);

      Hasil berikut dikembalikan:

              round
      ---------------------
       2022-02-23 00:00:00

Fungsi pengambilan tanggal dan waktu saat ini

CURRENT_DATE

  • Deskripsi: Mengembalikan tanggal saat ini.

    CURRENT_DATE
  • Nilai kembali:

    Nilai bertipe DATE dikembalikan.

  • Contoh:

    SELECT CURRENT_DATE;

    Hasil berikut dikembalikan:

     current_date
    --------------
     2024-08-08

CURRENT_TIMESTAMP

  • Deskripsi: Mengembalikan waktu mulai transaksi saat ini. Fungsi ini setara dengan fungsi TRANSACTION_TIMESTAMP atau NOW.

    CURRENT_TIMESTAMP
    Catatan

    Nilai kembali tetap tidak berubah selama siklus hidup transaksi.

  • Nilai kembali:

    Nilai bertipe TIMESTAMPTZ dikembalikan.

  • Contoh:

    SELECT CURRENT_TIMESTAMP;

    Hasil berikut dikembalikan:

           current_timestamp
    -------------------------------
     2024-08-08 14:55:11.006068+08

CLOCK_TIMESTAMP

  • Deskripsi: Mengembalikan tanggal dan waktu saat ini.

    clock_timestamp()
    Catatan

    Perubahan juga dapat dilakukan dalam satu perintah.

  • Nilai kembali:

    Nilai bertipe TIMESTAMPTZ dikembalikan.

  • Contoh:

    SELECT clock_timestamp();

    Hasil berikut dikembalikan:

            clock_timestamp
    -------------------------------
     2024-08-08 14:57:43.569109+08

LOCALTIMESTAMP

  • Deskripsi: Mengembalikan waktu saat ini tanpa informasi zona waktu.

    LOCALTIMESTAMP
  • Nilai kembali:

    Nilai bertipe TIMESTAMPTZ dikembalikan.

  • Contoh:

    SELECT LOCALTIMESTAMP;

    Hasil berikut dikembalikan:

          localtimestamp
    ---------------------------
     2024-08-08 15:00:59.13245

NOW

  • Deskripsi: Mengembalikan waktu mulai transaksi saat ini. Fungsi ini setara dengan fungsi TRANSACTION_TIMESTAMP atau CURRENT_TIMESTAMP.

    NOW()
    Catatan

    Nilai kembali tetap tidak berubah selama siklus hidup transaksi.

  • Nilai kembali:

    Nilai bertipe TIMESTAMPTZ dikembalikan.

  • Contoh:

    SELECT NOW();

    Hasil berikut dikembalikan:

                  now
    -------------------------------
     2024-08-08 15:02:50.270501+08

STATEMENT_TIMESTAMP

  • Deskripsi: Mengembalikan waktu mulai pernyataan saat ini.

    STATEMENT_TIMESTAMP()
    Catatan

    Nilai kembali bervariasi berdasarkan pernyataan dalam transaksi tempat fungsi digunakan.

  • Nilai kembali:

    Nilai bertipe TIMESTAMPTZ dikembalikan.

  • Contoh:

    SELECT STATEMENT_TIMESTAMP();

    Hasil berikut dikembalikan:

          statement_timestamp
    -------------------------------
     2024-08-08 15:06:14.772939+08

TIMEOFDAY

  • Deskripsi: Mengembalikan tanggal dan waktu saat ini. Fungsi ini mirip dengan fungsi CLOCK_TIMESTAMP. Nilai yang dikembalikan oleh fungsi TIMEOFDAY adalah string teks yang diformat.

    TIMEOFDAY()
  • Nilai kembali:

    Nilai bertipe TEXT dikembalikan.

  • Contoh:

    SELECT TIMEOFDAY();

    Hasil berikut dikembalikan:

                  timeofday
    -------------------------------------
     Thu Aug 08 15:08:16.599369 2024 CST

TRANSACTION_TIMESTAMP

  • Deskripsi: Mengembalikan waktu mulai transaksi saat ini. Fungsi ini setara dengan fungsi CURRENT_TIMESTAMP atau NOW.

    TRANSACTION_TIMESTAMP()
    Catatan

    Nilai kembali tetap tidak berubah selama siklus hidup transaksi.

  • Nilai kembali:

    Nilai bertipe TIMESTAMPTZ dikembalikan.

  • Contoh:

    SELECT TRANSACTION_TIMESTAMP();

    Hasil berikut dikembalikan:

         transaction_timestamp
    -------------------------------
     2024-08-08 15:11:10.329005+08

Fungsi lainnya

ISFINITE

  • Deskripsi:

    • Memeriksa apakah tanggal bertipe DATE merupakan angka terbatas.

      ISFINITE(DATE)
    • Memeriksa apakah timestamp merupakan angka terbatas.

      ISFINITE(TIMESTAMP)
  • Nilai kembali:

    Nilai bertipe BOOLEAN dikembalikan. Nilai true (t) dikembalikan jika tanggal atau timestamp merupakan angka terbatas, dan nilai false (f) dikembalikan jika tanggal atau timestamp bukan angka terbatas.

  • Contoh:

    • Contoh 1:

      SELECT ISFINITE(date '2001-02-16');

      Hasil berikut dikembalikan:

       isfinite
      ----------
       t
    • Contoh 2:

      SELECT ISFINITE(timestamp '2001-02-16 21:28:30');

      Hasil berikut dikembalikan:

       isfinite
      ----------
       t

Contoh SQL umum

  • Contoh 1: Menambahkan beberapa jam ke waktu saat ini.

    SELECT NOW()+interval '2 hour';

    Hasil berikut dikembalikan:

    ?column?
    ---------------------
    2022-12-29 13:43:58.321104+08
  • Contoh 2: Mengonversi tanggal menjadi timestamp.

    SELECT EXTRACT(epoch FROM current_timestamp);

    Hasil berikut dikembalikan:

    date_part
    ---------------------
    1672285506.296279
  • Contoh 3: Menambahkan nilai bertipe DATE dan nilai bertipe INT.

    CREATE TABLE date_test1(
        a DATE,
        b INT );
    INSERT INTO date_test1 VALUES ('2021-09-28','12');
    SELECT a + (b || ' month')::interval FROM date_test1;   

    Hasil berikut dikembalikan:

    ?column?
    --------------------
     2022-09-28 00:00:00
  • Contoh 4: Mengonversi string menjadi timestamp.

    SELECT TO_TIMESTAMP(TO_CHAR(20211027172045,'9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS');

    Hasil berikut dikembalikan:

    to_timestamp
    ----------------------
    2021-10-27 17:20:45+08
  • Contoh 5: Memotong waktu

    SELECT EXTRACT(mon FROM now());

    Hasil berikut dikembalikan:

    date_part
    ---------
    12
  • Contoh 6: Membagi integer dengan integer lain.

    Saat Anda membagi dua bilangan bulat, Hologres melakukan pembagian bilangan bulat dan membuang sisanya. Sebagai contoh, hasil dari 10/3 adalah 3. Untuk mendapatkan hasil dengan bagian desimal, ubah tipe data secara eksplisit menjadi float sebelum perhitungan, seperti yang ditunjukkan dalam contoh berikut:

    SELECT 10/3::float;

    Hasil berikut dikembalikan:

    ?column?
    ---------
    3.3333333333333335