从开始时间选择bool,并设置长度

时间:2014-04-08 17:29:47

标签: mysql time

接受标题改进。英语不是我的第一语言。

我需要的基本上是一种返回布尔值(1或0)的方法,具体取决于匹配是否仍然存在。

我有以下专栏:

dato date()
start time()

我需要返回的布尔值,1/0,如果日期相同,并且当前时间在start之内且前进110分钟。我一整天都没能想到这一点。

不要介意列名 - 这些不是真正的列名,只是忽略保留的关键字。

1 个答案:

答案 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

上的

示例