2012-01-16 33 views
0

我有這個疑問的MySQL數據庫:如何在PosgreSQL數據庫中使用DAY函數?

Article.where('DAY(created_at) = DAY(?)', day) 

我嘗試使用上面的查詢也是在PostgreSQL數據庫,特別是我想是這樣的:

Article.where("DATE_PART('day', created_at) = DATE_PART('day', ?)", today) 

但我正在逐漸錯誤PGError: ERROR: function date_part(unknown, unknown) is not unique

爲什麼會出現該錯誤?我以爲我的文檔有語法...

+0

程序員應該總是知道包含版本號。許多函數只在最近的版本或PostgreSQL中引入。 – 2012-01-16 22:55:37

回答

2

看來today是模式YYYY-MM-DD的字符串。您可以提取最右邊的兩個字符,而不是投射日期,然後提取數字。會更快更簡單:

Article.where("date_part('day', created_at::date)::int 
         = right(?, 2)::int", today) 

right()需要PostgreSQL 9.1或更高版本。在舊的版本,你可以替補多:

... = substring(?, 9) 

因爲你想要的字符9和10


這應該工作,太:

Article.where("date_part('day', created_at::date)::int 
         = date_part('day', ?::date)", today) 

注意,你必須投'2012-01-16'date,而不是interval'2012-01-16'::interval將是無稽之談。

1

按照documentation有兩個功能:

  • date_part(text, timestamp)
  • date_part(text, interval)

所以數據庫無法選擇你想要哪一個。將第二個參數轉換爲時間戳,例如像這樣:

DATE_PART('day', created_at::interval) = DATE_PART('day', ?::interval) 
+0

我仍然無法找到使用它的方式...'今天'變量的形狀是'2012-01-16','created_at'列是'datetime'類型,但我仍然收到錯誤,我已經嘗試過百萬種查詢方式 – user984621 2012-01-16 22:48:48

相關問題