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

PostgreSQL - Филтриране на период от време

Вашето решение е добро. Ако датите са буквални, бих предпочел обаче:

WHERE datefield >= '2010-01-01 00:00:00' 
 AND  datefield <  '2012-01-01 00:00:00'

Това работи точно по същия начин, но е по-поддържано, защото изяснява смисъла на всяка буквална "дата" да бъде клеймо за време, а не дата. Да предположим например, че някога някой промени вашата заявка на следното

    AND  datefield <=  '2012-01-01'

... очаква (и не успява) да включи целия ден "2012-01-01" в заявката. С по-късния синтаксис намерението е по-ясно и това объркване е предотвратено.

За да стане още по-ясно (може би твърде многословно), можете да направите изричното прехвърляне:

WHERE datefield >= '2010-01-01 00:00:00'::timestamp 
 AND  datefield <  '2012-01-01 00:00:00'::timestamp

Не бих използвал to_date() тук поради подобни причини (потенциално объркване на типа данни), нито to_timestamp() (връща timestamptz ).

Между другото, промених регистъра, за да отговаря на препоръчителната практика (ключови думи с главни букви, идентификатори с малки)



  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 CTE записи като параметри за функциониране

  2. Могат ли две временни таблици с едно и също име да съществуват в отделни заявки

  3. По някакъв начин да направя `where booleanvalue=false` както на Sql Server, така и на PostgreSQL?

  4. Невалиден формат на дъмп pgbackups:restore дори с връзка за изтегляне на Dropbox

  5. LOWER() – Преобразуване в малки букви в PostgreSQL