2012-01-16 32 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

相关问题