我有一张看起来像这样的表:
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
因此应该删除货币并仅保留价格。有没有办法做到这一点?
答案 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(而不是错误)。