我在postgresql中有一个表有一个名为 birthdate 的列数据类型TIMESTAMP
,是否可以编写一个sql语句,该语句将返回存储在存储日期中的生日值的年数差异表和当前日期?怎么做?我的服务器是Postgresql
这是我尝试过的,但它在第二次选择时给出了语法错误
select DATEDIFF(yy, NOW(), select birthdate from match where match_id = '550856d8560a64ed180416d1556f5435f4bb054c68930040')
答案 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_interval
和to_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';