Spanner menyediakan fungsi
date
dan
timestamp
di GoogleSQL
dan Cloud SQL untuk PostgreSQL. Beberapa fungsi, seperti
TIMESTAMP
,
bergantung pada zona waktu dan menerima parameter zona waktu opsional. Jika tidak ada parameter zona waktu yang diberikan dalam fungsi, database Spanner secara default menggunakan zona waktu America/Los_Angeles
.
Spanner memungkinkan Anda mengubah zona waktu default database untuk menyesuaikan perilaku ini.
Batasan
- Anda hanya dapat mengubah zona waktu database kosong tanpa tabel apa pun.
- Menyediakan parameter zona waktu dalam pernyataan akan menggantikan zona waktu default database untuk pernyataan tersebut.
- Semua stempel waktu di
REST API dan RPC API
harus menggunakan UTC dan diakhiri dengan
Z
huruf besar. - Stempel waktu dalam hasil kueri ditampilkan secara konsisten dalam UTC, dengan
Z
ditambahkan. Konversi zona waktu tampilan tidak dilakukan.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna menetapkan zona waktu default database, minta administrator untuk memberi Anda peran IAM Cloud Spanner Database Admin (roles/spanner.databaseAdmin
) di database.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk menyetel zona waktu default database. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk menyetel zona waktu default database:
-
menetapkan zona waktu default database:
spanner.databases.getDdl, spanner.databases.updateDdl
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Menetapkan zona waktu default
Untuk mengubah zona waktu default database Anda, jalankan pernyataan berikut:
GoogleSQL
Gunakan
pernyataan ALTER DATABASE
:
ALTER DATABASE DATABASE-NAME SET OPTIONS (default_time_zone = 'TIME-ZONE-NAME');
Ganti kode berikut:
- DATABASE-NAME: nama database. Contoh,
my-database
. - TIME-ZONE-NAME: nama zona waktu yang akan ditetapkan sebagai default database. Harus berupa entri yang valid dari
Database Zona Waktu IANA. Contohnya,
Etc/UTC
.
PostgreSQL
Gunakan
pernyataan ALTER DATABASE
:
ALTER DATABASE DATABASE-NAME SET spanner.default_time_zone = 'TIME-ZONE-NAME';
Ganti kode berikut:
- DATABASE-NAME: nama database. Contoh,
my-database
. - TIME-ZONE-NAME: nama zona waktu yang akan ditetapkan sebagai default database. Harus berupa entri yang valid dari
Database Zona Waktu IANA. Contohnya,
Etc/UTC
.
Contoh
Contoh kueri berikut menunjukkan cara menggunakan opsi zona waktu default.
Zona waktu default tidak disesuaikan
Jika opsi default_time_zone tidak ditetapkan secara eksplisit dalam skema database, nilai default_time_zone adalah null dan Spanner menggunakan America/Los_Angeles
sebagai zona waktu default. America/Los_Angeles
memiliki
selisih waktu UTC-8 untuk stempel waktu dalam contoh berikut.
Pernyataan:
SELECT TIMESTAMP("2072-12-25 15:30:00") AS timestamp_str;
Output:
/*----------------------*
| timestamp_str |
+----------------------+
| 2072-12-25T23:30:00Z |
*----------------------*/
Pernyataan:
SELECT EXTRACT(HOUR FROM TIMESTAMP("2072-12-25 15:30:00")) AS hour;
Output:
/*------*
| hour |
+------+
| 23 |
*------*/
Pernyataan:
SELECT TIMESTAMP_TRUNC(TIMESTAMP "2072-12-25 15:30:00", DAY) AS date_str;
Output:
/*----------------------*
| date_str |
+----------------------+
| 2072-12-25T08:00:00Z |
*----------------------*/
Opsi zona waktu default ditetapkan ke Etc/UTC
Contoh berikut menunjukkan perilaku pernyataan yang sama saat opsi zona waktu default disetel ke Etc/UTC
.
Pernyataan:
SELECT TIMESTAMP("2072-12-25 15:30:00") AS timestamp_str;
Output:
/*----------------------*
| timestamp_str |
+----------------------+
| 2072-12-25T15:30:00Z |
*----------------------*/
Pernyataan:
SELECT EXTRACT(HOUR FROM TIMESTAMP("2072-12-25 15:30:00")) AS hour;
Output:
/*------*
| hour |
+------+
| 15 |
*------*/
Pernyataan:
SELECT TIMESTAMP_TRUNC(TIMESTAMP "2072-12-25 15:30:00+00", DAY) AS date_str;
Output:
/*----------------------*
| date_str |
+----------------------+
| 2072-12-25T00:00:00Z |
*----------------------*/
Zona waktu default diganti oleh parameter fungsi
Jika fungsi atau literal string menyertakan parameter zona waktu yang ditentukan, zona waktu default database tidak akan diterapkan.
Pernyataan:
SELECT FORMAT_TIMESTAMP("%c", TIMESTAMP "2050-12-25 15:30:55+00", "Australia/Sydney")
AS formatted;
Output:
/*--------------------------*
| formatted |
+--------------------------+
| Mon Dec 26 02:30:55 2050 |
*--------------------------*/
Pernyataan:
SELECT TIMESTAMP("2072-12-25 15:30:00+11:00") AS timestamp_str;
Output:
/*----------------------*
| timestamp_str |
+----------------------+
| 2072-12-25T04:30:00Z |
*----------------------*/