2014-07-20 148 views
1

我想基於時間的價值來計算列,我不完全確定如果我應該使用If條件或Case,最好使用什麼?基於mysql的時間值計算

這裏是我的專欄

| Time_In    | Time_Out   | Val1 | Val2 | 
| 2014-07-19 04:00:04 | 2014-07-19 08:00:00 | 5  | 15  | 

我想要做的是如果時間如果時間是'08之間:'17至:00:00 00' :00(業務小時),它會自動繁殖VAL1和val2

如果時間'18:00:00' 到'23:00:00' (後營業時間)

唯一的一步,我能現在得到的是在時間戳中獲得時間,因爲這是我將比較

`SELECT date_format(STR_TO_DATE(Time_In, '%Y-%m-%d %H:%i:%s'), '%H:%i:%s') 
Output: 04:00:04 

`SELECT date_format(STR_TO_DATE(Time_Out, '%Y-%m-%d %H:%i:%s'), '%H:%i:%s') 
Output: 08:00:00 

我應該如何構造這個?

感謝您的幫助


我嘗試了第一次使用if條件,這是工作:)

SELECT 

IF(`Time_In` >= CAST('13:00:01' AS time) AND `Time_Out` <= CAST('15:00:00' AS time),(Val11 * Val2),'false') 


FROM table WHERE ID = '5' 

,並得到了輸出75:d

+0

請解釋一下,這時間值應爲04:00:00和10:00:00之間? Time_In,Time_Out,還有其他值? – VMai

+0

嗯,如果時間值剛好在'04:00:00'和'10:00:00'之間,可以嗎?或者應該有三個時間值? – user3856951

+0

我只是不知道這個時間價值從哪裏來? – VMai

回答

0

正如你假設你可以用CASE構造來做到這一點。

  • 您的字符串轉換爲DATETIME值與STR_TO_DATE
  • 與提取與TIME功能的部分時間

所以,你可以做到這一點,這裏的

'2014-07-19 12:00:00' 
'2014-07-19 18:00:00' 
示例值

與此聲明(您當然只需要一個CASE構造):

SELECT 
    CASE 
    WHEN Time(STR_TO_DATE('2014-07-19 12:00:00', '%Y-%m-%d %H:%i:%s')) BETWEEN '04:00:00' AND '17:00:00' 
     THEN Val1 * Val2 
    ELSE NULL 
    END result, 

    CASE 
    WHEN Time(STR_TO_DATE('2014-07-19 18:00:00', '%Y-%m-%d %H:%i:%s')) BETWEEN '04:00:00' AND '17:00:00' 
     THEN Val1 * Val2 
    ELSE NULL 
    END result2 

FROM 
    example; 

DEMO

+0

嗨我只想問是否有可能做一個更新查詢if條件如果條件下降爲真如'IF(Time_In> = CAST('13:00:01'AS時間)AND Time_Out <= CAST (隨着時間的推移'15:00:00',*更新查詢*,*插入查詢*)' – user3856951

+0

@ user3856951這是可能的,但只有使用存儲的例程。如果您還有其他問題,可以怎麼做,請提出另一個問題,並考慮將其標記爲此問題的答案。 – VMai

+0

好吧,我會那樣做,謝謝你 – user3856951