Activerecord查询.where字符串作为数字

时间:2015-11-05 18:16:10

标签: ruby-on-rails ruby activerecord

我在我的数据库中有记录,其中有一个时间元素,这是一个存储为字符串的数字。 我想运行where查询,检查数字是否大于x 例如

Recording.where("recording_duration_ms.to_i > 60000")

当然,这一定很简单......

4 个答案:

答案 0 :(得分:5)

完善@Alex Peachey给出的答案......

avoid SQL injection,您要使用?hash

Recording.where("CAST(recording_duration_ms AS INT) > ?", 60000)

Recording.where("CAST(recording_duration_ms AS INT) > :duration", duration: 60000)

答案 1 :(得分:4)

大多数SQL数据库允许您将CAST值赋予不同的数据类型。最有可能做你想做的查询是:

Recording.where('CAST(recording_duration_ms AS INT) > 60000')

答案 2 :(得分:0)

这适用于PostgreSQL,至少

64bit Amazon Linux 2015.09 v2.0.4 running PHP 5.6

答案 3 :(得分:-2)

PSQL将所有内容存储为字符串,因此您需要60000左右的单引号:

Recording.where(“recording_duration_ms.to_i>'60000'”)

(我认为)