SQL:基于条件的字段值?

Ted*_*Ted 3 php mysql sql

我需要返回一个特殊值来告诉我当前时间是否在开放时间内:

在表的地方

ID    OPEN     CLOSE  
1     14:00    16:00  
2     12:00    15:00
3     10:00    14:00
Run Code Online (Sandbox Code Playgroud)

我需要在查询中返回一个特殊字段:PLACE_IS_OPEN - true或false.

这样当时间返回的结果14:35是:

ID      PLACE_IS_OPEN
1       1
2       1
3       0
Run Code Online (Sandbox Code Playgroud)

什么是下降的方式来解决这个问题?

Mic*_*ski 5

测试TIME(NOW())位于打开和关闭时间之间,并将其布尔结果作为列返回.如果OPEN,CLOSE是MySQL DATETIME或TIME列,这将按原样工作.

SELECT
  ID,
  OPEN,
  CLOSE,
  CASE WHEN TIME(NOW()) BETWEEN `OPEN` AND `CLOSE` THEN 1 ELSE 0 END AS PLACE_IS_OPEN
FROM yourtable
Run Code Online (Sandbox Code Playgroud)

如果这些是字符列而不是正确的TIME类型,则需要STR_TO_TIME()转换它们

  CASE WHEN TIME(NOW()) BETWEEN TIME(STR_TO_DATE(`OPEN`, '%H:%i')) AND TIME(STR_TO_DATE(`CLOSE`, '%H:%i')) THEN 1 ELSE 0 END AS PLACE_IS_OPEN
Run Code Online (Sandbox Code Playgroud)

MySQL应该允许你简化CASE语句,因为BETWEEN它将返回0或1:

SELECT
  ID,
  OPEN,
  CLOSE,
  (TIME(NOW()) BETWEEN TIME(STR_TO_DATE(`OPEN`, '%H:%i')) AND TIME(STR_TO_DATE(`CLOSE`, '%H:%i'))) AS PLACE_IS_OPEN
FROM yourtable
Run Code Online (Sandbox Code Playgroud)