我在我的数据库中有记录,其中有一个时间元素,这是一个存储为字符串的数字。 我想运行where查询,检查数字是否大于x 例如
Recording.where("recording_duration_ms.to_i > 60000")
当然,这一定很简单......
答案 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'”)
(我认为)