子查询不适用于Date_Part()

时间:2018-06-11 11:10:14

标签: sql postgresql-9.1

我想将子查询作为参数传递给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;

返回以下我认为完全相同的以下内容     工作示例中的日期字符串。

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

有人可以纠正它,或让我知道其他一些方法来获取一周中的一天。

2 个答案:

答案 0 :(得分:2)

只需将其应用于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)
               );

答案 1 :(得分:1)

将函数放在里面select

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

我没有看到在select中使用子查询的优势(而不是 - 比如 - 将子查询移动到from。但这应该做什么你想要的。