2012-06-18 27 views
10

的第一天,我有一個PostgreSQL數據庫本年度

SELECT * 
FROM accounts 
where insertdate BETWEEN '2012-01-01' AND CURRENT_TIMESTAMP 

所以下面的查詢我怎能取代'2012-01-01'要求本年度

還有一個問題的第一天。當我在賬戶表中創建新記錄時,同一時刻正在運行上述選擇,因此它不會爲我提供我剛剛創建的記錄。是否合理? 追上它的最好方法是什麼?

+1

'YYYY-01-01'永遠是一年中的第一天...... –

回答

23

您正在尋找date_trunc(),可以截斷日期指定的精度(例如yearmonthday):

SELECT date_trunc('year', now()); 

在您的查詢:

SELECT * FROM accounts where insertdate BETWEEN 
date_trunc('year', now()) AND CURRENT_TIMESTAMP 
+0

這是完美的,但我還有一個問題。 當我在帳戶表中創建新記錄時,同一時刻正在運行上述選擇,因此它不會爲我提供我剛剛創建的記錄......超過它的最佳方式是什麼? – user1392203

+0

如果操作發生在單獨的事務中,則在提交插入事務後,查詢應該立即找到新記錄。如果他們在同一個事務中,則只需按正確的順序運行查詢。 – beerbajay

+0

有沒有辦法添加'當日23:59:59'? 類似'2012-6-19 23:59:59' – user1392203

1

你可以試試並使用此CURRENT_TIMESTAMP.YEAR-01-01