【发布时间】:2016-01-15 12:11:51
【问题描述】:
我在 Ruby on Rails 中进行 ActiveRecord 查询时遇到问题,该查询将返回所有用户,其blocked_dates(自动生成的字符串值)与给定事件的formatted_dates(自动生成的字符串值)不相交。
我遇到的问题是,例如:
User.where.not("string_to_array(blocked_dates, ',') && string_to_array(?, ',')", "26.12.2015")
返回一个空列表,其中:
User.where("string_to_array(blocked_dates, ',') && string_to_array(?, ',')", "26.12.2015")
返回blocked_dates 实际上包含“26.12.2015”的正确用户。
这种奇怪的行为有什么原因吗?或者 Postgres 重叠运算符 && 不能与 NOT 一起使用?
如果出现问题,这里是生成的 SQL 查询:
SELECT "users".* FROM "users" WHERE (NOT (string_to_array(blocked_dates, ',') && string_to_array('26.12.2015', ',')))
【问题讨论】:
-
嗨,您是否尝试使用
AND而不是&&?我希望这适用于AND -
PG::DatatypeMismatch: 错误:AND 的参数必须是布尔类型,而不是文本类型[]
-
日期似乎是标量类型,恕我直言,无需将其转换为数组。 (顺便说一句:为什么是 german 日期格式?)
-
因为应用程序要求将日期像这样放在其他组件中,但是由于该字段是自动生成的,所以我可以将它们放在我想要的任何格式中。
标签: sql ruby-on-rails database postgresql activerecord