Як перерахувати записи з датою за останні 10 днів?


101
SELECT Table.date FROM Table WHERE date > current_date - 10;

Чи працює це на PostgreSQL?

Відповіді:


190

Так, це працює в PostgreSQL (припускаючи, що стовпець " дата " має тип даних date) Чому б вам просто не спробувати?

Стандартним форматом ANSI SQL буде:

SELECT Table.date 
FROM Table 
WHERE date > current_date - interval '10' day;

Я віддаю перевагу такому формату, оскільки це полегшує читання (але це те саме, що і current_date - 10).


1
Запит повинен бути: SELECT Table.date FROM Table WHERE date> current_date - інтервал '10 день ';
user2694306

4
@ user2694306: interval '10 day'це синтаксис Postgres. interval '10' dayє синтаксисом, заснованим на стандарті SQL, а також підтримується Postgres
a_horse_with_no_name

1
інтервал повинен бути 9 . 10 насправді дає вам 11 днів тому від сьогодні.
Девід Хе

1
@DavidHe: це робить те саме, що і оригінальна відповідь. Який використовує 10, а не9
a_horse_with_no_name

3
Тільки примітка: На Redshift працює формулювання @ user2694306: інтервал "10 днів". інтервал "10" днів не працює на Redshift.
Бен,

33

http://www.postgresql.org/docs/current/static/functions-datetime.html показує оператори, яких можна використовувати для роботи з датами та часом (та інтервалами).

Так ти хочеш

SELECT "date"
FROM "Table"
WHERE "date" > (CURRENT_DATE - INTERVAL '10 days');

Оператори / функції, описані вище, детально задокументовані:


9

Як я зрозумів із мого тестування (і PostgreSQL dox ), котирування потрібно робити інакше, ніж інші відповіді, і вони також повинні включати "день", як це:

SELECT Table.date
  FROM Table 
  WHERE date > current_date - interval '10 day';

Продемонстровано тут (ви зможете запустити це на будь-якому Postgres db):

SELECT DISTINCT current_date, 
                current_date - interval '10' day, 
                current_date - interval '10 days' 
  FROM pg_language;

Результат:

2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00

Власне, я пропустив помітити, що відповідь Бредлі зрозуміла. У будь-якому разі, я залишу своє тут як доказ того, що це правильний шлях. Прийнята відповідь неправильна (принаймні для версії Postgre, яку я запускаю)
Вкрай нерегулярно,

0

Я б перевірив типи даних.

current_date має тип даних "date", 10 - це число, а Table.date - вам потрібно переглянути вашу таблицю.


0

ви також можете використовувати між ними:

SELECT Table.date
  FROM Table 
  WHERE date between current_date and current_date - interval '10 day';

Спочатку betweenмає бути з найменшим значенням, тому це буде правильно зроблено як SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
введіть
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.