person
| birthday |
?column?
--------------+------------+---------------------
Ken Thompson | 1955-03-23 | 1995-03-23 00:00:00
Ben Johnson | 1971-03-19 | 2011-03-19 00:00:00
(2 строки)
Можно заменить current_timestamp на current_date:
SELECT *, birthday + '40 years'::interval
FROM birthdays
WHERE birthday + '40 years'::interval < current_date;
А вот если мы захотим определить точный возраст каждого человека на теку-
щий момент времени, то как получить этот результат? Первый вариант таков:
SELECT *, ( current_date::timestamp -
birthday::timestamp )::interval
FROM birthdays;
person
| birthday | interval
--------------+------------+------------
Ken Thompson | 1955-03-23 | 22477 days
Ben Johnson | 1971-03-19 | 16637 days
Andy Gibson | 1987-08-12 | 10647 days
(3 строки)
Этот вариант не дает результата, представленного в удобной форме: он показы-
вает возраст в днях, а для пересчета числа дней в число лет нужны дополнитель-
ные действия. Хотя, наверное, возможны ситуации, когда требуется определить
возраст именно в днях.
В PostgreSQL предусмотрена специальная функция, позволяющая решить нашу
задачу простым способом. Самостоятельно найдите ее описание в документа-
ции (см. раздел 9.9 «Операторы и функции даты/времени») и напишите команду
с ее использованием.
32. Изучая приемы работы с массивами, можно, как и в других случаях, пользовать-
ся способностью команды SELECT обходиться без создания таблиц. Покажем
лишь два примера. Для объединения (конкатенации) массивов служит функция
array_cat:
SELECT array_cat( ARRAY[ 1, 2, 3 ], ARRAY[ 3, 5 ] );
array_cat
-------------
{1,2,3,3,5}
(1 строка)
Удалить из массива элементы, имеющие указанное значение, можно таким об-
разом:
Достарыңызбен бөлісу: