Mysql选择没有curency的数字价格范围字段


Mysql select numeric price range field without curency

我有一个表,它看起来像这样:

 type |  price
------+-----------
   1  |  0.99 $
------+-----------
   2  |  1.22 €
------+-----------
   2  |  2.99 €
------+-----------
   3  |  8.00 CHF
------+-----------
   1  |  1.99 $
------+-----------
   3  |  2.00 CHF
------+-----------
   3  |  2.50 CHF

正如你所看到的,它包含价格以及货币和与货币绑定的类型。

我想做这样的事情:

SELECT "range" FROM my_table where type = 3
// result = 2.00 - 8.00

因此,货币应该被移除,只保留价格。有办法做到这一点吗?

Mureinik的回答很好。我想注意的是,你也可以简单地做:

SELECT MIN(price + 0), MAX(price + 0)
FROM t
WHERE type = 3;

这使用MySQL的规则进行隐式转换。它会将字符串的前导字符转换为数字(整数或十进制(。如果字符串以非数字字符开头,则值为0(与错误相反(。

您可以使用substring_index只获取空格之前的部分。从那时起,您只需要将其转换为一个数字,并查询最小值和最大值:

SELECT MIN(price), MAX(price)
FROM   (SELECT CAST(SUBSTRING_INDEX(price, ' ', 1) AS DECIMAL(4, 2)) AS price
        FROM   mytable
        WHERE  type = 3) t