Подзапрос не работает для Date_Part () - PullRequest
0 голосов
/ 11 июня 2018

Я хочу передать подзапрос в качестве аргумента функции EXTRACT() Postgres, чтобы получить номер дня недели, но он не работает.

Рабочий код:

SELECT EXTRACT(dow FROM DATE '2018-06-07');
It returns:

+-------------+
| date_part   |
|-------------|
| 4.0         |
+-------------+

Не работает код:

SELECT EXTRACT(DOW FROM DATE 
   (SELECT start_date from leaves where submitted_by=245 and type_id = 16)
);
It returns
syntax error at or near "SELECT"
LINE 1: SELECT EXTRACT(DAY FROM DATE (SELECT submitted_on FROM leave...

Не знаю, почему функция EXTRACT() не принимает результат подзапроса в качестве запроса:

SELECT start_date from leaves where submitted_by=245 and type_id = 16;

возвращает следующее, которое, по моему мнению, идентично, я передал в качестве строки даты в рабочем примере.

+--------------+
| start_date   |
|--------------|
| 2018-06-07   |
+--------------+

Может кто-нибудь исправить это или сообщить мне другой способ получитьномер дня недели.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Поместите функцию внутри select:

select (select extract(dow from start_date)
        from leaves
        where submitted_by = 245 and type_id = 16
       )

Я не вижу преимущества использования подзапроса в select для этого (в отличие от -- скажем - перемещение подзапроса на from. Но это должно делать то, что вы хотите.

0 голосов
/ 11 июня 2018

Просто примените его к столбцу выбора:

SELECT EXTRACT(DOW from start_date)
from leaves 
where submitted_by=245 and type_id = 16

Если вы действительно хотите использовать скалярный подзапрос, вам нужно избавиться от ключевого слова DATE, которое необходимо толькоуказать константы даты.

SELECT EXTRACT(DOW FROM 
                 (SELECT start_date from leaves where submitted_by=245 and type_id = 16)
               );
...