2014-09-27 80 views
-1

我有一個類似下面的表。獲取下一個結果

id | episode_number 

1  55 
2  56 
3  57-58 
4  59 
5  60 
6  61-62 
7  63 
8  64 
9  65-66 
10  67-68 

我怎麼會得到下一個5個集57-58後沒有特異性的ID,只是EPISODE_NUMBER如EPISODE_NUMBER> 57-58 LIMIT 5

但顯然EPISODE_NUMBER> 57-58不會因爲它包含字符串。該數據庫將只是認爲它是5和EPISODE_NUMBER之後的下一個5個結果返回5.

回答

1

使用CAST function到字符串轉換爲數字,那麼你的查詢:

SELECT episode_number 
    FROM table_name 
    WHERE CAST(episode_number AS UNSIGNED) > CAST('57-58' AS UNSIGNED) 
    ORDER BY CAST(episode_number AS UNSIGNED) 
    LIMIT 5 

如果有兩個數字,例如: '57 -58' ,然後CAST('57-58' AS UNSIGNED)轉換,並返回第一個:57

+0

是的,這解決了問題!謝謝! – 2014-09-27 20:26:26

+0

MySQL允許以下簡寫:episode_number + 0 – Strawberry 2014-09-27 21:06:30

1

嘗試

SELECT TOP 5 * FROM tablename WHERE id >= (SELECT id FROM tablename WHERE episode_number = "57-58") 

,或者如果它是MySQL的

SELECT * FROM tablename WHERE id >= (SELECT id FROM tablename WHERE episode_number = "57-58") LIMIT 5 
+0

TOP不存在的MySQL,你應該使用極限,也爲了通過缺失 – radar 2014-09-27 20:14:31

+0

見我的編輯@Rajesh – 2014-09-27 20:14:52

+0

我是怎麼說出ID?再看看上面的問題。我說「..沒有特殊的ID ..」 – 2014-09-27 20:18:10

0

您可以選擇這樣的:

select id , case when LOCATE('-' , episode_number) = 0 then episode_number 
       else LEFT(episode_number , LOCATE('-' , episode_number)) end 
      as start_episode , 
      case when LOCATE('-' , episode_number) = 0 then episode_number 
       else RIGHT(episode_number , LEN(episode_number) -LOCATE('-' , episode_number)) end 
      as end_episode 

這應該給你這樣的查詢基本結構,你應該考慮轉換成數值數字能夠輕鬆地比較它們。 如果可能的重組表的東西,在分離領域的插曲開始和結束插曲

+0

太多東西,這會減慢查詢速度。 – 2014-09-27 20:35:14

+0

將這樣的數據存儲爲數據庫中的文本會丟失數據的含義。這表明如何創建一個更好的結構,正確地模擬問題的域名 – gabber 2014-09-27 20:41:27

+0

說38分的傢伙 – 2014-09-28 01:33:28