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

Как да съпоставя цял ден с поле за дата и час?

Изпратете своя timestamp стойност до date ако искате прост синтаксис. Като това:

SELECT *
FROM   tbl
WHERE  timestamp_col::date = '2011-12-01';  -- date literal

Въпреки това, с големи маси това ще бъде по-бързо:

SELECT *
FROM   tbl
WHERE  timestamp_col >= '2011-12-01 0:0'    -- timestamp literal
AND    timestamp_col <  '2011-12-02 0:0';

Причина:втората заявка не трябва да трансформира всяка отделна стойност в таблицата и може да използва прост индекс в колоната с времеви печат. Изразът е sargable.

Забележката изключи горната граница (< вместо <= ) за правилен избор.
Можете да компенсирате това, като създадете индекс на израз като този:

CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));

Тогава първата версия на заявката ще бъде толкова бърза, колкото е възможно.



  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 в Ubuntu за Ruby on Rails

  2. Връщане на множество полета като запис в PostgreSQL с PL/pgSQL

  3. Вземете дърво родители + деца с pg-promise

  4. Колко различен е PostgreSQL от MySQL?

  5. запазване на обект на python в таблица на postgres с туршия