Sql Activerecord,在字符串比较中选择

Sql Activerecord,在字符串比较中选择,sql,ruby,string,sqlite,activerecord,Sql,Ruby,String,Sqlite,Activerecord,我有一个名为Basic的表,start_time是一个类型为VARCHAR(5)的字段,它实际上存储了一个5字节的时间数据:字节0和1映射到年、月和日,字节2到4映射到小时、分钟和秒。所以,可能字节2、3、4都是0。我想做以下查询: Basic.find (:all , :conditions => "start_time > ? AND end_time < ?" , start_time , end_time) 我在使用activerecord的sqlite3适配器 谢谢

我有一个名为Basic的表,start_time是一个类型为VARCHAR(5)的字段,它实际上存储了一个5字节的时间数据:字节0和1映射到年、月和日,字节2到4映射到小时、分钟和秒。所以,可能字节2、3、4都是0。我想做以下查询:

Basic.find (:all , :conditions => "start_time > ? AND end_time < ?" , start_time , end_time)
我在使用activerecord的sqlite3适配器

谢谢你的帮助


我发现问题所在:当执行以下查询时,不允许在开始时间中包含“\000”:

Basic.find (:all , :conditions => "start_time > ? AND end_time < ?" , start_time , end_time)
第二步可通过以下方式完成:

a = [214,222,0,0,0] 
while a.last ==0 do a.pop end
a = [214,222]
a.pack("c" * a.size)

但是,在StasyTime= = [214,222.0,23, 0 ]时,我仍然不能进行查询,因为相应的字符串在中间包含“\\ 000”。幸运的是,在我们的应用程序中,这不会是一个大问题,因为我们从不在小时级别查询,这意味着最后两个数字将始终为0。

这就是您想要的吗

[214, 222, 0, 0, 0].inject(""){|s,c| s << c.chr; s} # => "\326\336\000\000\000"
[2142220,0,0,0].注入(“{s,c|s”\326\336\000\000\000”
至于我为什么知道这一点…我想在twitter上说一次传销,但实际上没有说。因为如果你真的这么说,你会被所有这些传销垃圾邮件发送者自动跟踪。所以我说

[77, 76, 77].inject(""){|s,c| s << c.chr; s}

[77,76,77]。注入(“”){| s,c | s为什么不使用日期类型?如果您使用的是SQLite,我假设它不是一个遗留设置…遗留数据库以其原始格式节省了时间-MJD为年,BCD为小时、分钟和秒。它在使用sqlite3 API时运行良好,到目前为止,我还没有看到任何令人信服的理由将其保存在日期类型中。
[77, 76, 77].inject(""){|s,c| s << c.chr; s}