#postgresql
Вопрос:
Я довольно новичок в Postgresql, но у меня все еще есть некоторые вопросы. У меня есть таблица с двумя столбцами, которые мне нужно отфильтровать по:
mlx_date-дата (тип данных) mlx_time-время (время без часового пояса)
Мой вопрос таков
SELECT ip_visit_1.ipv1_firstname, ip_visit_1.ipv1_lastname, ip_visit_1.ipv1_num, ns_medication.mlx_date, ns_medication.mlx_time, ns_medication.mlx_item FROM ns_medication INNER JOIN ip_visit_1 ON ns_medication.mlx_acctnum = ip_visit_1.ipv1_num WHERE TO_CHAR(ns_medication.mlx_date ns_medication.mlx_time, 'YYYYMMDDHHMISS') gt;= CURRENT_TIME - INTERVAL '10' MINUTE
Сообщение об ошибке-оператор не существует: текст gt;= время с часовым поясом СТРОКА 16: …lx_date ns_medication.mlx_time, ‘YYYYMMDDHHMISS’) gt;= ТЕКУЩИЙ… ^ ПОДСКАЗКА: Ни один оператор не соответствует заданному имени и типу(типам) аргументов. Возможно, вам потребуется добавить явные приведения типов.
Я не могу найти ничего, что позволило бы мне объединить эти две колонки и найти что-либо за последние десять минут. У кого — нибудь есть предложение о функции, которую я мог бы попробовать использовать?
Комментарии:
1. Избавьтесь от
to_char()
бесполезного с самого начала и причины вашей ошибки.ns_medication.mlx_date ns_medication.mlx_time
уже вернет atimestamp
, с которым вы можете напрямую сравнитьcurrent_date
2. Если я сделаю ns_medication.mlx_date ns_medication.mlx_time gt; = CURRENT_DATE — ИНТЕРВАЛ ’10’ МИНУТ, он вернет все с сегодняшней даты, а не в течение последних десяти минут.
3. Вам нужно использовать
current_timestamp
неcurrent_date
, если вы хотите последние 10 минут4. В связи с этим возникает вопрос, почему бы не создать
timestamp with time zone
колонку, объединяющую эти два аспекта? Тогда вам нужно будет посмотреть только на одну колонку. Вы можете разложить этот столбец, чтобы получитьdate
иtime
при необходимости. Это экономит вам один столбец памяти и накладные расходы на создание метки времени.
Ответ №1:
SELECT ip_visit_1.ipv1_firstname, ip_visit_1.ipv1_lastname, ip_visit_1.ipv1_num, ns_medication.mlx_date, ns_medication.mlx_time, ns_medication.mlx_item FROM ns_medication INNER JOIN ip_visit_1 ON ns_medication.mlx_acctnum = ip_visit_1.ipv1_num WHERE WHERE ns_medication.mlx_time gt;= CURRENT_TIME - INTERVAL '10' MINUTE AND ns_medication.mlx_date = CURRENT_DATE