我有一个表,它看起来像这样:
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