查找SUBSTRING的MIN()值()
问题描述:
我遇到以下问题。想象一下,我的MySQL表看起来像这样:查找SUBSTRING的MIN()值()
id range
1 210-400
2 300-310
3 100-350
我想找到
- 第一部分的最小值(之前的“ - ”)在范围字段
- 的MAX值第二部分(后“ - ”)在范围字段
现在我试图选择与SUBSTRING该字段的需要的部分,然后获得MIN或MAX值是这样的:
SELECT
SUBSTRING_INDEX(`range`,'-',1) as `left_value`,
SUBSTRING_INDEX(`range`,'-',-1) as `right_value`,
MIN(`left_value`),
MAX(`right_value`)
FROM `table`
但我只是得到 “#1054 - 在 '字段列表' 未知列 'left_value'” - 是这甚至可能,并如何
所以我的问题?
答
您在第三行之后缺少逗号(在as 'right_value'
之后)。
但是,这可能仍然不会完全解决您的问题。 Devart的回答为+1。要展开,你可能寻找的东西接近这个:
SELECT
MIN(SUBSTRING_INDEX(`range`, '-', 1)),
MAX(SUBSTRING_INDEX(`range`, '-', -1))
FROM `table`
答
使用SUBSTRING_INDEX两次 - 在MIN和MAX的功能,或者使用子查询,因为别名不是在目前的SELECT访问。
答
由于Devart描述,您不能使用“别名”列名,但使用MySQL,你可以使用SQL变量...也许调整为类似
SELECT
@leftValue := SUBSTRING_INDEX(`range`,'-',1) as ignore1,
@rightValue := SUBSTRING_INDEX(`range`,'-',-1) as ignore2,
MIN(@leftValue) as LowRange,
MAX(@rightValue) as HighRange
FROM
`table`,
(select @leftValue := '', @rightValue := '') SqlVars
而这,阶级,所以存储一个字段中的多个值是一个坏主意。 – cHao 2012-02-01 13:57:08