2017-02-09 97 views
0

不應該這樣工作嗎?在postgres中使用子查詢提取日期組件

select extract(DAY FROM TIMESTAMP (select to_timestamp('2015-02-23','YY-MM-DD')::timestamp)) 

ERROR: syntax error at or near "select" 
LINE 1: select extract(YEAR FROM TIMESTAMP (select to_timestamp('201... 
             ^
********** Error ********** 

ERROR: syntax error at or near "select" 
SQL state: 42601 
Character: 37 

如這裏extract doc

解釋任何幫助表示讚賞謝謝:)

+0

您的錯誤輸出與查詢不匹配。你爲什麼要施加時間戳到時間戳? –

回答

0

下面的查詢會給你你想要的結果:

select extract(DAY FROM (select to_timestamp('2015-02-23','YYYY-MM-DD'))); 

問題,我與你目前的做法看:

  • 正如@harmic指出的那樣,您不需要TIMESTAMP關鍵字,因爲to_timestamp()函數已經返回時間戳類型。
  • 此外,您將結果從to_timestamp()再次轉換爲不需要的時間戳
  • 您的時間戳的格式掩碼錯誤。你使用YY-MM-DD,但它應該真的是YYYY-MM-DD考慮到你有四位數的年份。在這種情況下,這可能無關緊要,但如果您計劃提取年份,這可能很重要。
+1

子選擇不是必須的:'選擇提取物(DAY FROM to_timestamp('2015-02-23','YYYY-MM-DD'))' –

+0

Thanks @ClodoaldoNeto – vairowalia

0

這不工作:

psql=> select extract(DAY FROM (select to_timestamp('2015-02-23','YY-MM-DD')::timestamp)) 
; 
date_part 
----------- 
     23 
(1 row) 

就是因爲extract的語法是:

EXTRACT(field FROM source) 

您的示例中的關鍵字TIMESTAMP實際上是文字時間戳的一部分,但您沒有使用文字時間戳,而是標量子查詢表達式,因此請將TIMESTAMP取出。

參見:

+0

感謝您的回答,謝謝@harmic – vairowalia