子查询不适用于 Date_Part()

Sub-query is Not Working for Date_Part()

我想将子查询作为参数传递给 Postgres 的 EXTRACT() 函数以获取星期几,但它不起作用。

工作代码:

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;

returns以下我认为相同的我已经通过了 工作示例中的日期字符串。

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

有人可以更正它或让我知道其他获取星期几的方法。

只需将其应用于 select 的列:

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)
               );

把函数放在里面select:

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

我看不出为此在 select 中使用子查询有什么好处(而不是——比如说——将子查询移动到 from)。但这应该做什么你要。