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

时间:2016-10-29 10:43:38

标签: php mysql sql select

我有一张看起来像这样的表:

 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

因此应该删除货币并仅保留价格。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

Mureinik的答案很好。我想要指出,您也可以这样做:

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

这使用MySQL的隐式转换规则。它会将字符串的前导字符转换为数字(整数或小数)。如果字符串以非数字字符开头,则值为0(而不是错误)。