PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zgłoś błąd, gdy data jest nieprawidłowa

Możesz napisać własną funkcję to_date(), ale musisz ją wywołać, używając jej nazwy kwalifikowanej według schematu. (Użyłem schematu „public”, ale nie ma w tym nic specjalnego).

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

Użycie samej nazwy funkcji powoduje wykonanie natywnej funkcji to_date().

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

Użycie nazwy kwalifikowanej do schematu powoduje wykonanie funkcji zdefiniowanej przez użytkownika.

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

Wiem, że to nie jest to, czego szukasz. Ale . . .

  • To prostsze niż przebudowanie PostgreSQL ze źródeł.
  • Naprawianie istniejącego kodu źródłowego SQL i PLPGSQL to proste wyszukiwanie i zastępowanie za pomocą edytora strumieniowego. Jestem przekonany, że nie może się nie udać, o ile naprawdę chcesz każde użycie natywnej to_date() jako public.to_date().
  • Natywna funkcja to_date() nadal będzie działać zgodnie z założeniami. Rozszerzenia i inny kod mogą polegać na jego nieco osobliwym zachowaniu. Pomyśl mocno i długo, zanim zmienisz zachowanie funkcji natywnych.

Jednak nowy SQL i PLPGSQL wymagałyby przeglądu. Nie spodziewałbym się, że programiści będą pamiętać o pisaniu public.to_date() za każdym razem. Jeśli używasz kontroli wersji, możesz być w stanie napisać przechwycenie precommit, aby upewnić się, że używana jest tylko public.to_date().

Natywna funkcja to_date() ma zachowanie, którego nie widzę w dokumentacji. Nie tylko możesz zadzwonić do 29 lutego, ale możesz zadzwonić do 345 lutego lub 9999 lutego.

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. PG::ConnectionBad:fe_sendauth:brak hasła

  2. Poprawa wydajności OFFSET w PostgreSQL

  3. Jak wygenerować instrukcję create table sql dla istniejącej tabeli w postgreSQL?

  4. Formatowanie daty (RR:MM:DD:godzina) w programie Excel

  5. Konwertuj tablicę PostgreSQL na tablicę PHP