mysql - 视为数字并在两者之间搜索

标签 mysql sql

在我的表中有一列,它的类型是varchar。所有行中的值都是这样的:

 +------------+----+
 |   price    | id |
 +------------+----+
 | Rp 100000  | 1  |
 | Rp 200000  | 2  |
 | Rp 50000   | 3  |
 | Rp 1000    | 4  |
 | Rp 1000    | 5  |
 | Rp 2000    | 6  |
 | Rp 35000   | 7  |
 | Rp 45000   | 8  |

我试过这个查询

  SELECT table WHERE price between Rp 100000 AND Rp 200000

但结果它仍然获取不在中间范围内的行,例如它选择了 id 1,2,4,5,6

我认为这是由查询试图忽略的 0 值引起的。 我认为解决这个问题的方法是将此 var-char 视为数字(以印尼盾表示的价格/金额),以便查询识别我正在尝试做的事情。

任何人都可以帮助实现这一目标吗?提前致谢。

最佳答案

试试这个方法:

select * from yourTable
 where substring(price,3) between 100000 and 200000

在这里查看:http://sqlfiddle.com/#!9/37197/4

您不需要cast值,它将被隐式完成。

substring(price,3) 所做的是从 price 列的第三个字符开始获取所有内容,因此没有 RF 字符(还要注意空格)并与 between 运算符上的数字进行比较。

substring(price,3) 将返回一个字符串,但由于它仅由数字组成,因此 mysql 在与数字进行比较时将隐式转换它。

关于mysql - 视为数字并在两者之间搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29553420/

相关文章:

mysql - 执行时间过多也会影响数据库性能

sql - 查询效率

mysql - 加载错误: cannot load such file -- mysql2/mysql2 - on rake db:create

c# - 如何在网页上以表格形式显示 csv 文件中的数据

mysql - Hibernate:删除父实体会触发子实体的更新查询

sql - 使用组和区间数据查找岛屿

sql - 重写查询替换 not in

sql - 检查日期时间值是否溢出

MySQL 将两列合并为一列,其中一列具有 NULL 值(应删除)

php - JSON 值未返回,但显示在 echo 上