PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Генериране на серии от дати - като се използва тип дата като вход

Благодарение на разделителна способност на типа функция можем също да предадем date стойности към generate_series() защото има неявно прехвърляне от date до timestamp както и от date до timestamptz . Би било двусмислено, но timestamptz е „предпочитан“ сред „Типове дата/час“. Подробно обяснение:

  • Генериране на времеви серии между две дати в PostgreSQL

За гола date местното време 00:00 се предполага в актьорския състав. Имайте предвид, че текущата настройка на часовата зона пряко влияе върху резултата, ако използвате date като вход, тъй като очевидно „2014-01-10 00:00“ представлява различен момент във времето в Токио, отколкото в Ню Йорк.

Как Postgres решава кои типове са приемливи?

Postgres основно разграничава три типа cast:

Explicit casts .. когато използвате CAST или :: синтаксис.
Assignment cast .. неявно прехвърляне, когато стойност е присвоена на целева колона.
Implicit cast .. неявни прехвърляния във всички други изрази.

Трябва да има неявно прехвърляне, регистрирано в системата от входния тип към очаквания тип, за да накара функцията да приеме (и преобразува) безшумно входна стойност.

За да видите кои прехвърляния са дефинирани към timestamptz , можете да потърсите каталожната таблица 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

Всички тези прехвърляния са имплицитни . Според документация за castcontext :

Показва в какви контексти може да бъде извикано прехвърлянето. e означава само като неявно предаване (използвайки CAST или :: синтаксис). a означава имплицитно присвояване на целева колона, както и изрично. i означава имплицитно в изразите, както и останалите случаи.

Удебелен акцент мой.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преглед на генерираните колони за PostgreSQL

  2. HikariCP - връзката не е налична

  3. ИЗПУСКАНЕ ТАБЛИЦА, АКО СЪЩЕСТВУВА Пример в PostgreSQL

  4. Стойността за грешка не съществува - проблем с postgresql INSERT INTO

  5. Как да нулирате последователността в postgres и да попълните колоната за идентификатор с нови данни?