我已经构建了一个具有小型搜索功能的 Web 应用程序。作为搜索的一部分,我为用户提供了按金额搜索的选项。我做了一些搜索,除了“LIKE”子句对 SQL 中的数字不起作用之外,没有找到任何可靠的示例或建议,所以我的问题是:
有人可以提供一个正确的 SQL 语句示例来搜索数据库中带小数的数字。例如,如果某些输入 5234.32 作为货币搜索,我希望结果返回“金额”列为 5xxx.xx 的任何记录。如果用户输入 64.58,我想返回“金额”列为 6x.xx 的任何记录
提前致谢
搜索5xxx.xx
与搜索相同5000 <= field AND field < 6000
。
我建议不要截断该字段,因为它会阻止 DBMS 使用任何现有索引。假设有一个索引,上面显示的范围扫描应该非常有效field
。
根据您的数据库,您可能可以这样做:
-- 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))
当然,正如布兰科在回答中提到的那样,这可能会很慢
您可以转换为 varchar 并使用之类的吗?
否则,您可以使用像 @ypercube 所述的算术运算。