我需要返回一个特殊值来告诉我当前时间是否在开放时间内:
在表的地方
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)
什么是下降的方式来解决这个问题?
测试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)
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |