2012-05-14 63 views
0

我已經構建了一個具有小型搜索功能的Web應用程序。作爲我的搜索的一部分,我爲用戶提供了按美元金額搜索的選項。我做了一些搜索,除了「LIKE」子句不對SQL中的數字進行操作外,沒有找到任何可靠的示例或建議,因此我的問題是:SQL搜索數據庫中的數字/貨幣值

有人可以提供正確的SQL語句示例使用數據庫中的小數進行搜索。例如,如果某些輸入5234.32作爲貨幣搜索,我希望結果返回其「金額」列爲5xxx.xx的任何記錄。如果用戶輸入的64.58,我想回到它的任何記錄「金額」欄是6x.xx驅動

在此先感謝

+0

您需要對此進行算術運算。你可能會用'LIKE'做到這一點,但它不會很好。 –

+0

請理解[Stack Overflow不是您的個人研究助理](http://meta.stackexchange.com/a/128553/140505) - 我們希望您向我們展示您嘗試的內容,並解釋您之前所處的位置我們回答這個問題。 – Oded

+0

這是什麼數據庫? –

回答

0

根據您的數據庫上,你也許可以做到這一點:

-- Oracle 
WHERE TRUNC(amount, -decimals) = TRUNC(:user_input, -decimals) 

-- MySQL 
WHERE TRUNCATE(amount, -decimals) = TRUNCATE(:user_input, -decimals) 

通過decimals我的意思的數字來,你要保留小數點左邊是一個愚蠢的方式來發現SQL小數數目W,即

TRUNC(5234.32, -3) = 5000.00 
TRUNC(64.58, -1) = 60.00 

烏爾德是這樣的:

-- Oracle 
LENGTH(TO_CHAR(TRUNC(amount))) 

-- MySQL 
LENGTH(CAST(TRUNCATE(amount) AS CHAR)) 

當然,這可能會變成很慢,因爲Branko在他的回答中提到

0

可以轉換爲varchar和使用什麼樣的?

否則,您可能會使用像@ypercube所述的算術運算。

+0

謝謝!這是我最初的方法,但我想看看是否有更正確的方法來做到這一點。感謝@aF。 –

+0

@MarkJohnsII你應該接受答案。或者有一天沒有人會回答。檢查如何在此處執行此操作:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

2

搜索5xxx.xx與搜索5000 <= field AND field < 6000相同。

我建議不要截斷字段,因爲它會阻止DBMS使用任何現有的索引。如果在field上有索引,上面顯示的範圍掃描應該非常有效。