PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Hasilkan rangkaian tanggal - gunakan tipe tanggal sebagai input

Berkat resolusi jenis fungsi kami juga dapat melewati date nilai ke generate_series() karena ada implisit dilemparkan dari date ke timestamp serta dari date ke timestamptz . Akan ambigu, tetapi timestamptz adalah "lebih disukai" di antara "Jenis tanggal/waktu". Penjelasan detail:

  • Membuat deret waktu antara dua tanggal di PostgreSQL

Untuk date telanjang waktu setempat 00:00 diasumsikan dalam pemeran. Ketahuilah bahwa pengaturan zona waktu saat ini secara langsung memengaruhi hasil jika Anda menggunakan date sebagai masukan karena, jelas, '2014-01-10 00:00' mewakili titik waktu yang berbeda di Tokio daripada di New York.

Bagaimana Postgres memutuskan jenis apa yang dapat diterima?

Postgres pada dasarnya membedakan antara tiga jenis pemeran:

Explicit casts .. saat menggunakan CAST atau :: sintaks.
Assignment cast .. pemeran implisit saat nilai ditetapkan ke kolom target.
Implicit cast .. pemeran implisit dalam semua ekspresi lainnya.

Harus ada implisit cast terdaftar di sistem dari tipe input ke tipe yang diharapkan untuk membuat fungsi menerima (dan mengonversi) nilai input secara diam-diam.

Untuk melihat pemeran mana yang ditentukan untuk timestamp , Anda dapat menanyakan tabel katalog pg_cast :

SELECT castsource::regtype, casttarget::regtype, castcontext
FROM   pg_cast
WHERE  casttarget = 'timestamptz'::regtype;

         castsource          |        casttarget        | castcontext
-----------------------------+--------------------------+-------------
 abstime                     | timestamp with time zone | i
 date                        | timestamp with time zone | i
 timestamp without time zone | timestamp with time zone | i
 timestamp with time zone    | timestamp with time zone | i

Semua pemeran ini implisit . Per dokumentasi di castcontext :

Menunjukkan dalam konteks apa pemeran dapat dipanggil. e berarti hanya sebagai pemeran eksplisit (menggunakan CAST atau :: sintaksis). a berarti penugasan secara implisit ke kolom target, serta secara eksplisit. i berarti secara implisit dalam ekspresi, serta kasus lainnya.

Penekanan saya yang berani.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psql:tidak dapat terhubung ke server:Tidak ada file atau direktori seperti itu (Mac OS X)

  2. PG::ConnectionBad:fe_sendauth:tidak ada kata sandi yang diberikan

  3. Ganti nama tabel dengan aman menggunakan kolom kunci utama serial

  4. Mencetak ke layar dalam file .sql postgres

  5. Cara Mengekstrak Nomor Minggu dari Tanggal di PostgreSQL