0

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

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

提前致谢

4

3 回答 3

2

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

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

于 2012-05-14T13:03:51.880 回答
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))

当然,正如布兰科在回答中提到的那样,这可能会很慢

于 2012-05-14T13:01:01.003 回答
0

您可以转换为 varchar 并使用之类的吗?

否则,您可以使用像 @ypercube 所述的算术运算。

于 2012-05-14T13:02:00.787 回答