2015-05-25 51 views
0

您好我有这个下表..如何使用字符串和int值

offer_number  training_title 
************** 
    ABC-1   SEMINAR 
    ABC-9   SEMINAR 
    ABC-10   SEMINAR 
    ABCD-9   TRAINING 
    EFGH-9   TESTING 
    EFGH-10  TESTING 

Mysql的

SELECT *, MAX(offer_number) as offer_number_latest FROM (`training_program`) WHERE `training_title` LIKE '%SEMINAR%' GROUP BY `training_title` ORDER BY `offer_number` desc 

我想制作ABC-10 但 我总是得到ABC-选择马克斯9而不是ABC-10。

示例2:

SELECT *, MAX(offer_number) as offer_number_latest FROM (`training_program`) WHERE `training_title` LIKE '%TESTING%' GROUP BY `training_title` ORDER BY `offer_number` desc 

我需要的结果EFGH-10 但 我总是EFGH-9不是EFGH-10。

+0

9> 1 - 你就必须有“ABC-09”进行比较,以工作的方式..相反,你可以“提取”从字符串的数量和使用 - 简单的应该是“REPLACE(offer_number ,'ABC-','')“只获取字符串的数字部分([或使用udf正则表达式?](http://stackoverflow.com/a/986870/1786423)),然后您可能必须CAST()表示数字(或加上+0使用自动转换) – jkavalik

+0

是字符前缀总是每组相同? –

+0

freddy?上面的任何输入? –

回答

1

如果offer_number前缀始终是每training_title相同,下面的(肮脏)的查询将工作:

select training_title, 
    concat(
    left(offer_number, 
     locate('-', offer_number) 
    ), 
    max(
     cast(substring(offer_number, locate('-', offer_number) + 1) as signed) 
    ) 
) from offers group by training_title 

demo here

-1

MySQL也有字符串函数。

mysql> select * from offer; 
    +--------------+----------------+ 
    | offer_number | training_title | 
    +--------------+----------------+ 
    | ABC-1  | SEMINAR  | 
    | ABC-9  | SEMINAR  | 
    | ABC-10  | SEMINAR  | 
    | ABC-8  | SEMINAR  | 
    | ABC-14  | SEMINAR  | 
    | ABC-12  | SEMINAR  | 
    +--------------+----------------+ 
    6 rows in set (0.00 sec) 

    mysql> SELECT MAX(CAST(SUBSTRING(offer_number,LOCATE('-',offer_number)+1) AS SIGNED)) as MAX FROM offer ; 
    +------+ 
    | MAX | 
    +------+ 
    | 14 | 
    +------+ 
    1 row in set (0.00 sec) 

    mysql> SELECT * FROM offer ORDER BY CAST(SUBSTRING(offer_number,LOCATE('-',offer_number)+1) AS SIGNED); 
    +--------------+----------------+ 
    | offer_number | training_title | 
    +--------------+----------------+ 
    | ABC-1  | SEMINAR  | 
    | ABC-8  | SEMINAR  | 
    | ABC-9  | SEMINAR  | 
    | ABC-10  | SEMINAR  | 
    | ABC-12  | SEMINAR  | 
    | ABC-14  | SEMINAR  | 
    +--------------+----------------+ 
    6 rows in set (0.00 sec) 
相关问题