2015-06-13 275 views
0

我有一個postgresql中的表,它有一個列數據類型TIMESTAMP命名爲出生日期,是否有可能編寫一個sql語句,將返回從表中存儲的生日和年當前日期?這將如何完成?我的服務器是PostgreSQL的在兩個日期之間的差異

這是我已經試過,但它給我一個語法錯誤在第二選擇

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

回答

5

有東西數錯在這裏。

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