2012-06-21 21 views
0

你好,我有一個索引字符串字段,可以包含字符串或數字。 我想得到這個指數的最大值和最小值,但我想只有一個數字索引的順序是整數,否則就是字符串。 例如,我想:Mysql字符串/數字順序

("1", "5", "10")  MIN=1 MAX=10 // mind MAX=10 not 5 as string order! 
    ("A", "D", "Z")  MIN=A MAX=Z 

我嘗試這樣做:

MAX(IF(CAST(idxfield as UNSIGNED)=0,CAST(idxfield as UNSIGNED),idxfield)) as maxField 

但不起作用。

謝謝。

+0

這聽起來像你好得多的程序語言編寫本(如PHP,Perl,Python和Java或C/C++)比SQL。你只需要寫一個函數「maxvalue()」來檢查「if is_number(){}」。恕我直言... – paulsm4

+0

即使你得到它的工作,它會放慢到不值得有索引的地步。需要兩列,或者推動數字前導零。 –

+0

檢查我的答案... –

回答

0

您可以使用REGEXP來測試該字段是否爲數字。

例如:

select '1' REGEXP '^[0-9]+$'; // returns 1 
select 'A' REGEXP '^[0-9]+$'; // returns 0 
0

試一試::

Select 
idxfield REGEXP '[0-9] as field1, 
CASE field1 
WHEN 1 THEN SELECT idxfield from table order by idxfield+0 desc 
WHEN 0 THEN SELECT idxfield from table order by idxfield desc 
END as max_value, 
CASE field1 
WHEN 1 THEN SELECT idxfield from table order by idxfield+0 
WHEN 0 THEN SELECT idxfield from table order by idxfield 
END as min_value 
from table