如何通过带有 Ruby Sequel 的占位符将列表传递给 IN 子句
How to pass a list to an IN clause via a placeholder with Ruby Sequel
我正在尝试将引用列表传递给带有 Ruby Sequel.
的 IN
子句中的占位符
具体来说:
query = "
SELECT *
FROM PRICE
WHERE REGION IN (?)"
然后我用RubySequel:dataset = dbr[query, param_values]; dataset.sql
。
如果我像这样将 param_values
作为字符串传递:param_values = "'NSW1', 'VIC1'"
,where 子句变为:
WHERE REGION IN ((N'''NSW1'', ''VIC1'''))
不起作用 - 大概引号太多了。如果我尝试将参数作为带引号的字符串数组传递,如下所示:param_values = %w[NSW1 VIC1]
where 子句变为:WHERE REGION IN ((N'NSW1' = N'VIC1'))
不起作用。
有什么有用的东西吗?
我会使用 Sequel's query builder language 而不是手动编写 SQL 如果您使用默认命名约定,它看起来像这样:
DB[:prices]
.select(:date, :price, :region_id)
.where(region_id: %w[NSW1 VIC1])
query = "
SELECT *
FROM PRICE
WHERE REGION IN ?"
regions = Sequel.lit("'NSW1', 'VIC1'")
sql = db.fetch(query, regions).sql
puts "sql: #{sql}"
给出:
sql: SELECT *
FROM PRICE
WHERE REGION IN ('NSW1', 'VIC1')
这就是我们想要的。
我正在尝试将引用列表传递给带有 Ruby Sequel.
的IN
子句中的占位符
具体来说:
query = "
SELECT *
FROM PRICE
WHERE REGION IN (?)"
然后我用RubySequel:dataset = dbr[query, param_values]; dataset.sql
。
如果我像这样将 param_values
作为字符串传递:param_values = "'NSW1', 'VIC1'"
,where 子句变为:
WHERE REGION IN ((N'''NSW1'', ''VIC1'''))
不起作用 - 大概引号太多了。如果我尝试将参数作为带引号的字符串数组传递,如下所示:param_values = %w[NSW1 VIC1]
where 子句变为:WHERE REGION IN ((N'NSW1' = N'VIC1'))
不起作用。
有什么有用的东西吗?
我会使用 Sequel's query builder language 而不是手动编写 SQL 如果您使用默认命名约定,它看起来像这样:
DB[:prices]
.select(:date, :price, :region_id)
.where(region_id: %w[NSW1 VIC1])
query = "
SELECT *
FROM PRICE
WHERE REGION IN ?"
regions = Sequel.lit("'NSW1', 'VIC1'")
sql = db.fetch(query, regions).sql
puts "sql: #{sql}"
给出:
sql: SELECT *
FROM PRICE
WHERE REGION IN ('NSW1', 'VIC1')
这就是我们想要的。