两个日期之间的年份差异

时间:2015-06-13 04:15:34

标签: sql postgresql date

我在postgresql中有一个表有一个名为 birthdate 的列数据类型TIMESTAMP,是否可以编写一个sql语句,该语句将返回存储在存储日期中的生日值的年数差异表和当前日期?怎么做?我的服务器是Postgresql

这是我尝试过的,但它在第二次选择时给出了语法错误

select DATEDIFF(yy, NOW(), select birthdate from match where match_id = '550856d8560a64ed180416d1556f5435f4bb054c68930040')

1 个答案:

答案 0 :(得分:6)

这里有很多错误。

select DATEDIFF
       ^^^^
       PostgreSQL doesn't have a datediff function.

regress-> \df datediff
                       List of functions
 Schema | Name | Result data type | Argument data types | Type 
--------+------+------------------+---------------------+------
(0 rows)

我认为您需要-运算符,extract函数,justify_intervalto_char函数。另外,写current_timestamp而不是now(),这是标准拼写。

还有:

(yy, NOW(), select birthdate ...)
            ^^^

是一个语法错误,因为您没有将子查询包装在(parentheses)中,它应该是:

(yy, NOW(), (select birthdate  ...))

但是在这种情况下不需要子查询,因为你可以将它展平到外部查询中,当子查询被修复但没有其他内容时,它会给你这个:

select DATEDIFF(yy, NOW(), birthdate)
from match where match_id = '550856d8560a64ed180416d1556f5435f4bb054c68930040';

和日期减法:

regress=> SELECT extract(year FROM justify_interval(current_timestamp - DATE '2008-02-01'));
 date_part 
-----------
         7
(1 row)

给出类似的东西:

SELECT extract(year FROM justify_interval(current_timestamp - birthdate))
from match where match_id = '550856d8560a64ed180416d1556f5435f4bb054c68930040';