根据mysql中的time值计算

时间:2014-07-20 16:39:25

标签: mysql

我正在尝试根据时间值计算一列,如果我应该使用If条件或Case,我不确定最好使用什么?

这是我的专栏

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

我想要做的是,如果时间是,如果时间在'08:00:00'到'17: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

1 个答案:

答案 0 :(得分:0)

正如您所假设的那样,您可以使用CASE结构。

  • 使用STR_TO_DATE
  • 将您的字符串转换为DATETIME值
  • 使用TIME函数
  • 提取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