[英]SQL wildcards via Ruby
我试图使用通配符或正则表达式在使用Ruby编写的简单库目录程序中从数据库检索信息时给用户输入一些余地。
有问题的代码(如果存在完全匹配,则当前有效):
puts "Enter the title of the book"
title = gets.chomp
book = $db.execute("SELECT * FROM books WHERE title LIKE ?", title).first
puts %Q{Title:#{book['title']}
Author:#{book['auth_first']} #{book['auth_last']}
Country:#{book['country']}}
我正在使用SQLite3。在SQLite终端中,我可以输入:
SELECT * FROM books WHERE title LIKE 'Moby%'
要么
SELECT * FROM books WHERE title LIKE "Moby%"
并获取(假设输入正确):
Title: Moby-Dick
Author: Herman Melville
Country: USA
在我的Ruby程序中,我找不到任何相应的方法。
在这种情况下不能使用SQL %
通配符吗? 如果是这样,我是否需要在这里使用Ruby正则表达式? 有什么好的处理方法?
(即使将?
放在单引号( '?'
)也将使其在程序中不再起作用。)
任何帮助是极大的赞赏。
(注意:我实际上只是想修改Beginning Ruby (Peter Cooper)第9章中的示例代码。)
您赋予SQL LIKE
模式只是一个带有可选模式字符的字符串。 这意味着您可以在Ruby中构建模式:
$db.execute("SELECT * FROM books WHERE title LIKE ?", "%#{title}%")
或在SQL中使用字符串:
$db.execute("SELECT * FROM books WHERE title LIKE '%' || ? || '%'", title)
请注意,LIKE的区分大小写取决于数据库,但是SQLite的区分大小写,因此在尝试切换数据库之前,您不必担心。 不同的数据库有不同的处理方式,有些数据库不区分大小写,例如LIKE,某些数据库有单独的LIKE版本的LIKE,不区分大小写,有些使您自己规范化大小写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.