Fungsi Waktu dan Tanggal

Sqlite menyediakan fungsi waktu yang bisa digunakan untuk mendapatkan tanggal atau waktu saat penyimpanan data. Ini akan berguna saat kalian menggunakan insert atau update untuk menyimpan waktu penyimpanan ke dalam kolom tabel database.

Karena tidak ada format tanggal, kalian harus memastikan format penyimpanannya harus sesuai dengan format tanggal jika tidak menggunakan fungsi waktu. Kalian bisa menyimpan tanggal sebagai angka yang merepresentasikan kalender Julian. Jika formatnya tidak sesuai dengan kedua format yang sudah saya sebutkan sebelumnya, angka akan diperlakukan sebagai hitungan dari awal timestamp unix (1970-01-01 00:00:00).

Beberapa fungsi waktu dan tanggal yang digunakan sqlite bisa kalian lihat di bawah ini.

  • date(time-value, modifier, modifier, ...)
  • time(time-value, modifier, modifier, ...) 
  • datetime(time-value, modifier, modifier, ...)
  • julianday(time-value, modifier, modifier, ...)
  • unixepoch(time-value, modifier, modifier, ...)
  • strftime(format, time-value, modifier, modifier, ...)
Contoh Query :
  • INSERT INTO siswa(tanggal, waktu) VALUES(DATE(), TIME());
Date mengembalikan tanggal "saat eksekusi query" dengan format YYYY-MM-DD. Time mengembalikan waktu saat eksekusi query dengan format HH-mm-SS. Jika kalian ingin mendapatkan waktu dengan format lain, kalian bisa menggunakan strftime yang menggunakan format string.
  • %d : tanggal : 00
  • %f : fractional seconds: SS.SSS
  • %H : jam (00-24)
  • %j : selisih hari dari awal tahun (001-366)
  • %J : Julian day number (fractional)
  • %m : bulan (01-12)
  • %M : menit (00-59)
  • %s : detik sejak 1970-01-01
  • %S : detik (00-59)
  • %w : hari (0-6) with Sunday==0
  • %W : minggu dari satu tahun (00-53)
  • %Y : tahun (0000-9999)
Contoh penggunaan Date dalam statement insert.
//install librarynya kalau belum ada
#include <iostream>
#include <sqlite3.h>

char *err;
typedef char stringku[30];

int callback(void *notused, int jkolom, char **dataku, char **kolom){
   for(int i=0;i<jkolom;i++){
       printf("%s : %s\n", kolom[i], dataku[i]);
   }
   printf("\n");
   return 0;
}

void isi_database(sqlite3 *conn){
    char query[255];
    static stringku data[8][3]={{"Deri", "3A", "75"}, {"Panji", "3A", "95"}, {"Romi", "3A", "80"}, {"Doni", "3B", "70"}, {"Jennie", "3B", "60"}, {"Roni", "3C", "50"}, {"Hani", "3C", "45"}, {"Mini", "3C", "40"}};
	     
    sqlite3_exec(conn, "Create Table siswa(id INTEGER Primary Key, nama Text, kelas Text, nilai INTEGER, waktu TEXT);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<8;i++){
        sprintf(query, "INSERT INTO siswa(id, nama, kelas, nilai, waktu) VALUES('%d', '%s', '%s', '%s', DATE())", i, data[i][0], data[i][1], data[i][2]);
        sqlite3_exec(conn, query, 0, 0, &err);
    }
}

int main(){
    int res=0;
    sqlite3 *conn=NULL;
    sqlite3_stmt *stmt=NULL;
    sqlite3_open("databaseku.dat", &conn);
	
    //jika database kosong, tambah tabel
    sqlite3_exec(conn, "Drop Table siswa", 0, 0, &err);
    isi_database(conn);

    //gunakan query
    printf("Kelas : \n");
    sqlite3_exec(conn, "SELECT * FROM siswa", callback, 0, &err);
    
    sqlite3_close(conn);
    return 0;
}
Output :
Kelas :
id : 0
nama : Deri
kelas : 3A
nilai : 75
waktu : 2022-04-29

id : 1
nama : Panji
kelas : 3A
nilai : 95
waktu : 2022-04-29

id : 2
nama : Romi
kelas : 3A
nilai : 80
waktu : 2022-04-29

id : 3
nama : Doni
kelas : 3B
nilai : 70
waktu : 2022-04-29

id : 4
nama : Jennie
kelas : 3B
nilai : 60
waktu : 2022-04-29

id : 5
nama : Roni
kelas : 3C
nilai : 50
waktu : 2022-04-29

id : 6
nama : Hani
kelas : 3C
nilai : 45
waktu : 2022-04-29

id : 7
nama : Mini
kelas : 3C
nilai : 40
waktu : 2022-04-29