簡體   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