繁体   English   中英

通过Ruby的SQL通配符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM