2011-02-23 28 views
0
+--------------------+---------------+------+-----+---------+-------+ 
| ID     | GKEY   |GOODS | PRI | COUNTRY | Extra | 
+--------------------+---------------+------+-----+---------+-------+ 
| 1     | BOOK-1  | 1 | 10 |   |  | 
| 2     | PHONE-1  | 2 | 12 |   |  | 
| 3     | BOOK-2  | 1 | 13 |   |  | 
| 4     | BOOK-3  | 1 | 10 |   |  | 
| 5     | PHONE-2  | 2 | 10 |   |  | 
| 6     | PHONE-3  | 2 | 20 |   |  | 
| 7     | BOOK-10  | 2 | 20 |   |  | 
| 8     | BOOK-11  | 2 | 20 |   |  | 
| 9     | BOOK-20  | 2 | 20 |   |  | 
| 10     | BOOK-21  | 2 | 20 |   |  | 
| 11     | PHONE-30  | 2 | 20 |   |  | 
+--------------------+---------------+------+-----+---------+-------+ 

以上是我的表格。我想要獲取所有GKEY> BOOK-2的記錄,誰可以告訴我使用mysql的表達式?MYSQL - 如何進行字符串比較和查詢?

使用「WHERE GKEY>'BOOK-2'」無法獲得正確的結果。

回答

1

如何(像):

(這是MSSQL - 我想這將是在MySQL類似)

select 
    * 
from 
    (
     select 
     *, 
     index = convert(int,replace(GKEY,'BOOK-','')) 
     from table 
     where 
     GKEY like 'BOOK%' 
    ) sub 
where 
    sub.index > 2 

通過解釋:內部查詢基本上再現您的表,但僅限於BOOK行,並且在正確的數據類型中包含一個包含索引的額外列,以便在數值上進行比較。

或者是這樣的:

select 
    * 
from table 
where 
    (
    case 
     when GKEY like 'BOOK%' then 
      case when convert(int,replace(GKEY,'BOOK-','')) > 2 then 1 
      else 0 
      end 
     else 0 
     end 
    ) = 1 

本質的問題是,你需要檢查BOOK你把之前的索引,一個數字小,因爲GKEY的其他值會產生一個錯誤(沒有做一些笨重的字符串處理)。

+0

我是新手。你能否把細節告訴我? – acai 2011-02-23 10:58:32

+0

謝謝。我會嘗試你的解決方法。BTW,對於這個問題有沒有更簡潔的方法? – acai 2011-02-23 11:06:27

+0

@acai:它不乾淨和簡短的原因是你的情況非常可怕!首先需要的是數據庫中的設計缺陷。 – 2011-02-23 11:23:37

1
SELECT * FROM `table` AS `t1` WHERE `t1`.`id` > (SELECT `id` FROM `table` AS `t2` WHERE `t2`.`GKEY`='BOOK-2' LIMIT 1) 
+0

如果GKEY沒有從小到大排序,會出現問題。 – acai 2011-02-23 10:56:13