接受标题改进。英语不是我的第一语言。
我需要的基本上是一种返回布尔值(1或0)的方法,具体取决于匹配是否仍然存在。
我有以下专栏:
dato date()
start time()
我需要返回的布尔值,1/0,如果日期相同,并且当前时间在start
之内且前进110分钟。我一整天都没能想到这一点。
不要介意列名 - 这些不是真正的列名,只是忽略保留的关键字。
答案 0 :(得分:0)
使用timestampdiff
计算当天的时间差异
我假设,当你说,if the day is same
它是当前日期。
select
timestampdiff( minute, concat( dato, ' ', start ), now() ) >= 110
如果它不是当前日期,请将上述解决方案中的now()
替换为其他有效datetime
值,然后运行。
示例:
mysql> set @dato = curdate();
Query OK, 0 rows affected (0.00 sec)
mysql> set @start := curtime() - interval 120 minute;
Query OK, 0 rows affected (0.00 sec)
mysql> select
-> timestampdiff( minute,
-> concat( @dato, ' ', @start ),
-> now()
-> ) >= 110 as 'diff > 110';
+------------+
| diff > 110 |
+------------+
| 1 |
+------------+
跟进:
timestampdiff
首先获得最少日期,然后是下一个日期。如果您想在未来的日期找到积极的差异,您必须使用当前时间中最少和最大的列日期。
SELECT
@dt := concat( gamedate, ' ', starttime )
, @nw := now()
, @diff :=
timestampdiff(
minute,
least( @dt, @nw ),
greatest( @dt, @nw )
)
, @diff >= 110 as 'diff > 110 min ?'
FROM games
MySQL 5.5.32 Fiddle 上的示例