我已经构建了一个具有小型搜索工具的Web应用程序。作为我搜索的一部分,我向用户提供按金额搜索的选项。我做了一些搜索并没有找到任何可靠的例子或建议,除了“LIKE”子句不对SQL中的数字操作,所以我的问题是:
有人可以提供正确SQL语句的示例来搜索数据库中带小数的数字。例如,如果某些输入5234.32作为货币搜索,我希望结果返回“amount”列为5xxx.xx的任何记录。如果用户输入64.58,我想要返回“金额”列为6x.xx的任何记录
提前致谢
答案 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声明的算术运算。