2017-07-11 53 views
1

有沒有辦法將日期投射到時間戳。例如,如果我有像2012/05/01這樣的日期,我怎樣才能將它轉換爲時間戳,如2012-05-01 00:00:01在pgSQL中投射日期到時間戳

+0

你有沒有看過[Postgresql數據類型格式化函數](https://www.postgresql.org/docs/9.6/static/functions-formatting.html)? –

+0

你嘗試過哪些工作沒有成功。張貼也是。 –

+0

'提取物(年齡)* 12 +提取物(從年齡算起)AS months_between FROM age(TIMESTAMP'2012-06-13 10:38:40',TIMESTAMP'2011-04-30 14:38:40' )' 我有一個日期變量,我需要用日期變量替換這個硬編碼的時間戳@LohitGupta –

回答

1

您可以將日期列轉換爲文本,然後與時間戳的時間部分連接。在下面的查詢中,我從當前日期創建一個時間戳。

select (cast(current_date as text) || ' 00:00:01'):: timestamp 
from yourTable; 

或者,如果我們已經有一個日期類型,我們可以簡單地添加時間成分:

select current_date + '00:00:01'::time 

輸出:

11.07.2017 00:00:01 

Demo

更新:

如果你只是想在幾個月的差別兩個日期之間,你可以使用以下命令:

DATE_PART('month', AGE(end_date, start_date)) 

當然,這裏存在不涉及時間成分,但假設你正在計劃分配虛擬00:00:01對兩個時間戳,結果都不會改變。

+0

我的存儲過程輸入變量是start_date和end_date 。但是這給出了一個錯誤 '提取(年齡)* 12 +提取(月齡從月)AS months_ between FROM age(TIMESTAMP'cast(start_date as text)||'00:00:01'):: timestamp' ,TIMESTAMP'cast(end_date as text)|| '00:00:01'):: timestamp');' –

+0

由於代碼錯誤,導致錯誤,您在那裏有不平衡的引號。也許更新你的問題,讓我們知道你爲什麼需要這樣做。通常情況下,你不應該這樣形成時間戳。 –

+0

我需要從兩個日期中獲取月份期間。你能解釋一下如何將這兩個變量集成到這個代碼中嗎? –

0

您可以添加部分時間日期

select current_date + '00:00:01'::time 
2

您可以使用此代碼,將其轉換爲timestamp

SELECT current_date::timestamp 

這將直接00:00:00分配時間current_date

+0

它給了我這個錯誤。end_dates是我的日期變量 '錯誤:類型時間戳的無效輸入語法:「end_dates」 SQL狀態:22007 上下文:PL/pgSQL函數gettargetreports(date,date) –

1
select cast(current_date as timestamp) + interval '1 second' 

接近標準SQL,只有間隔語法不同interval '1' second