可能会感到悲伤,但它来了。
我正在尝试对Rails中的一个子句执行IN操作。
电话是:
@ret = BBOrder.find(:all, :conditions => ["symbol LIKE ? AND creationDateTimeInt IN ?", "%#{symbol}%", "#{date_ints}"])
date_ints
之前是作为数组创建的,然后对它们有一个join.(', ')
。我试着输入一个值来测试操作
错误消息是:
BBOrder Load (2.2ms) EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'
ODBC::Error: 37000 (102) [unixODBC][FreeTDS][SQL Server]Incorrect syntax near '(20130616)'.: EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'
Completed 500 Internal Server Error in 26ms
ActiveRecord::StatementInvalid (ODBC::Error: 37000 (102) [unixODBC][FreeTDS][SQL Server]Incorrect syntax near '(20130616)'.: EXEC sp_executesql N'SELECT [dbo].[BBOrders].* FROM [dbo].[BBOrders] WHERE (symbol LIKE N''%%'' AND creationDateTimeInt IN N''(20130616)'')'):
app/controllers/pages_controller.rb:43:in `home'
有什么想法吗?
我不想做原始的SQL查询。这只会增加代码。
答案 0 :(得分:1)
如果您使用的是Rails 3,则可以使用AR查询界面:
BBOrder.where('symbol LIKE ?', "%#{symbol}%").where(creationDateTimeInt: date_ints)
答案 1 :(得分:1)
试试这个:
@ret = BBOrder.find(:all, :conditions => ["symbol LIKE ? AND creationDateTimeInt IN(?)", "%#{symbol}%", date_ints])
您不需要对IN值进行字符串解析,我认为您需要括号。