我正在编写ruby脚本并希望执行本机Sql查询。
I/p arr = ["1", 2, "3", 5, 6]
预期o / p:
arr = (1,2,3,4)
它必须是一些我想念的简单,加入总是给我“(1,2,3,4)”,当在查询中使用时
select * from users where id IN (1,2,3,4)
应该有效。目前,当“(1,2,3,4)”用作输入时,只有id与1匹配。
编辑:
我正在使用mysql。
require 'mysql2'
client = Mysql2::Client.new(:host => @db_host, :username => @db_user, :password => @db_pass, :database => @db_name, :port => @port)
任何快速解决方案都会有所帮助
答案 0 :(得分:1)
inp = ["1", 2, "3", 5, 6]
outp = "(#{inp.join(',')})"
# => "(1,2,3,5,6)"
答案 1 :(得分:1)
使用Array#join。
这是我的样本表
$ sqlite3 test.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> select * from cars;
1|Audi|52642
2|Mercedes|57127
3|Skoda|9000
4|Volvo|29000
5|Bentley|350000
6|Citroen|21000
7|Hummer|41400
8|Volkswagen|21600
下面的代码显示了如何在给定数组的in子句中查询(这在mysql / postgres等中几乎相同)。
$ irb
2.3.1 :001 > require 'sqlite3'
# => true
2.3.1 :002 > db = SQLite3::Database.open 'test.db'
# => #<SQLite3::Database:0x00000000d892d0 @tracefunc=nil, @authorizer=nil, ...
2.3.1 :003 > qry = "select * from Cars where id in (#{[1,2,3,4, "5"].join(", ")})"
# => "select * from Cars where id in (1, 2, 3, 4, 5)"
2.3.1 :004 > db.execute qry
# => [[1, "Audi", 52642], [2, "Mercedes", 57127], [3, "Skoda", 9000], [4, "Volvo", 29000], [5, "Bentley", 350000]]