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

Naikkan kesalahan saat tanggal tidak valid

Anda dapat menulis fungsi to_date() Anda sendiri, tetapi Anda harus memanggilnya dengan nama yang memenuhi syarat skema. (Saya menggunakan skema "publik", tetapi tidak ada yang istimewa tentang itu.)

create or replace function public.to_date(any_date text, format_string text)
returns date as
$$
select to_date((any_date::date)::text, format_string);
$$
language sql

Menggunakan nama fungsi telanjang akan mengeksekusi fungsi asli to_date().

select to_date('20130229', 'yyyymmdd');
2013-03-01

Menggunakan nama yang memenuhi syarat skema menjalankan fungsi yang ditentukan pengguna.

select public.to_date('20130229', 'yyyymmdd');
ERROR: date/time field value out of range: "20130229"
SQL state: 22008

Saya tahu bukan itu yang Anda cari. Tetapi . . .

  • Ini lebih sederhana daripada membangun kembali PostgreSQL dari sumber.
  • Memperbaiki kode sumber SQL dan PLPGSQL yang ada adalah pencarian dan penggantian sederhana dengan editor streaming. Saya cukup yakin itu tidak akan salah, selama Anda benar-benar mau setiap penggunaan to_date() asli menjadi public.to_date().
  • Fungsi asli to_date() akan tetap berfungsi seperti yang dirancang. Ekstensi dan kode lain mungkin bergantung pada perilakunya yang agak aneh. Berpikir keras dan jauh sebelum Anda mengubah perilaku fungsi asli.

SQL dan PLPGSQL baru perlu ditinjau. Saya tidak berharap pengembang mengingat untuk menulis public.to_date() setiap saat. Jika Anda menggunakan kontrol versi, Anda mungkin dapat menulis hook prakomit untuk memastikan hanya public.to_date() yang digunakan.

Fungsi asli to_date() memiliki perilaku yang tidak saya lihat didokumentasikan. Anda tidak hanya dapat menyebutnya dengan 29 Februari, Anda dapat menyebutnya dengan 345 Februari, atau Februari 9999.

select to_date('201302345', 'yyyymmdd');
2014-01-11

select to_date('2013029999', 'yyyymmdd');
2040-06-17



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rel semua pengguna dalam grup dengan jenis kelamin laki-laki

  2. Bagaimana cara menggunakan `RETURN NEXT` di PL/pgSQL dengan benar?

  3. Koneksi jarak jauh server Postgresql

  4. Ekspor data besar dari PostgreSQL ke AWS s3

  5. Kueri SQL menggunakan klausa WHERE IN