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