在我的表中有一个类型为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视为数字(Rupiah中的价格/数量),以便查询识别出我想要做的事情。
有人可以帮忙解决这个问题吗?提前致谢。
答案 0 :(得分:2)
尝试这种方式:
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将隐式转换它。