查找SUBSTRING的MIN()值()

问题描述:

我遇到以下问题。想象一下,我的MySQL表看起来像这样:查找SUBSTRING的MIN()值()

id range 
1 210-400 
2 300-310 
3 100-350 

我想找到

  1. 第一部分的最小值(之前的“ - ”)在范围字段
  2. 的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'” - 是这甚至可能,并如何

所以我的问题?

+6

而这,阶级,所以存储一个字段中的多个值是一个坏主意。 – cHao 2012-02-01 13:57:08

您在第三行之后缺少逗号(在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