2014-05-11 133 views
0

我有一個包含一些數據的表。它看起來像:選擇一個行匹配條件或第一個匹配條件,如果沒有任何匹配條件

MariaDB [lokatnik]> SELECT id_elixir, start_time FROM elixir ORDER BY start_time ASC; 
+-----------+------------+ 
| id_elixir | start_time | 
+-----------+------------+ 
|   3 | 00:00:00 | 
|   1 | 12:30:00 | 
|   2 | 13:30:00 | 
+-----------+------------+ 
3 rows in set (0.00 sec) 

現在,我需要選擇具體哪一行匹配時間條件 - 說 - START_TIME> some_time。

例如:

  • 當some_time是10:00,然後我需要id_elixir行= 1(首先用的時間比10:00多行),
  • 當some_time是13:00 ,那麼我需要一排id_elixir = 2(如上),
  • 時some_time時間爲14:00,然後我需要id_elixir ROW = 3

我怎樣才能使用SQL此行(和MySQL/MariaDB DBMS)?

+0

什麼是'start_time'列數據類型? –

+0

這是TIME的類型。 –

+0

將時間與00:00:00比較是非常不可能的,因爲它可能是午夜的同一天或次日的午夜。所以'> '14:00''將會失敗並且會返回意想不到的結果。 –

回答

0

也許,這樣的事情會爲你工作:

SELECT 
    * 
FROM 
    elixir 
WHERE 
    CASE 
    WHEN start_time BETWEEN CAST('10:00:00' AS TIME) AND CAST('13:00:00' AS 
     TIME) 
    THEN id =1 
    WHEN start_time BETWEEN CAST('13:00:00' AS TIME) AND CAST('14:00:00' AS 
     TIME) 
    THEN id   =2 
    WHEN start_time > CAST('14:00:00' AS TIME) 
    THEN id   =3 
    ELSE true 

但實際上你可以檢查,通過使用簡單的布爾運算符:

SELECT 
    * 
FROM 
    elixir 
WHERE 
    (
    start_time BETWEEN CAST('10:00:00' AS TIME) AND CAST('13:00:00' AS TIME) 
    AND id =1 
) 
OR 
    (
    start_time BETWEEN CAST('13:00:00' AS TIME) AND CAST('14:00:00' AS TIME) 
    AND id =2 
) 
OR 
    (
    start_time > CAST('14:00:00' AS TIME) 
    AND id  =3