SQL在DB中搜索数字/货币值

时间:2012-05-14 12:56:29

标签: mysql sql search decimal

我已经构建了一个具有小型搜索工具的Web应用程序。作为我搜索的一部分,我向用户提供按金额搜索的选项。我做了一些搜索并没有找到任何可靠的例子或建议,除了“LIKE”子句不对SQL中的数字操作,所以我的问题是:

有人可以提供正确SQL语句的示例来搜索数据库中带小数的数字。例如,如果某些输入5234.32作为货币搜索,我希望结果返回“amount”列为5xxx.xx的任何记录。如果用户输入64.58,我想要返回“金额”列为6x.xx的任何记录

提前致谢

3 个答案:

答案 0 :(得分:2)

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

我建议不要截断字段,因为它会阻止DBMS使用任何现有索引。假设field上有索引,上面显示的范围扫描应该非常有效。

答案 1 :(得分:0)

根据您的数据库,您可以执行以下操作:

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

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

decimals我的意思是你要保留的小数点左边的位数,即

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

在SQL中发现小数的一种愚蠢的方法是:

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

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

当然,这可能会变得缓慢,正如他在回答中提到的Branko

答案 2 :(得分:0)

您可以转换为varchar并使用类似的内容吗?

否则你可以使用@ypercube声明的算术运算。