Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按日期选择似乎不起作用_Mysql - Fatal编程技术网

Mysql 按日期选择似乎不起作用

Mysql 按日期选择似乎不起作用,mysql,Mysql,由于我不是世界上最伟大的SQLer,我正在一步一步地朝着某个大目标努力 我有一张桌子: mysql> describe taps; +---------------+-----------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-----------+------+---

由于我不是世界上最伟大的SQLer,我正在一步一步地朝着某个大目标努力

我有一张桌子:

mysql> describe taps;
+---------------+-----------+------+-----+-------------------+-------+
| Field         | Type      | Null | Key | Default           | Extra |
+---------------+-----------+------+-----+-------------------+-------+
| tag_id        | int(11)   | YES  |     | NULL              |       |
| time_stamp    | timestamp | NO   |     | CURRENT_TIMESTAMP |       |
| event_id      | int(11)   | YES  |     | NULL              |       |
| event_station | int(11)   | YES  |     | NULL              |       |
| device_id     | text      | YES  |     | NULL              |       |
| device_type   | text      | YES  |     | NULL              |       |
+---------------+-----------+------+-----+-------------------+-------+
6 rows in set (0.00 sec)
并希望在今天,即2017年2月12日,选择给定日期的所有条目

我正在努力

mysql> select * from taps WHERE (event_id=4) 
          AND ((time_stamp >= 1486857600000) AND (time_stamp <= 1486944000000));
所以,我试着选角

select * from taps WHERE (event_id=4) 
   AND ((time_stamp >= CAST(1486857600000 AS DATETIME)) 
   AND (time_stamp <= CAST(1486944000000 AS DATETIME)));
Empty set (0.00 sec)

我做错了什么?我的查询应该是什么?

MySQL对于日期/时间的术语非常混乱,请参见。时间戳本质上是带有时区的日期时间,因为该值存储为UTC,但在本地时区中报告

不要将此时间戳与Unix时间戳混淆,Unix时间戳只是自1970-01-01以来的秒数,在某些情况下是毫秒数

在您的情况下,请尝试以下方法:

select t.*
from taps t 
where event_id = 4 and
      time_stamp >= '2017-02-11 07:00:00' and
      time_stamp < '2017-02-12 07:00:00';
您可以使用from_unixtimestap。然而,人们普遍认为日期格式更容易阅读


注意:我将最后一个条件改为严格不等式。这将为您提供24小时无时间重复的服务,以防恰好在2017-02-12 07:00:00发生某些事情。

MySQL的日期/时间术语非常混乱,请参见。时间戳本质上是带有时区的日期时间,因为该值存储为UTC,但在本地时区中报告

不要将此时间戳与Unix时间戳混淆,Unix时间戳只是自1970-01-01以来的秒数,在某些情况下是毫秒数

在您的情况下,请尝试以下方法:

select t.*
from taps t 
where event_id = 4 and
      time_stamp >= '2017-02-11 07:00:00' and
      time_stamp < '2017-02-12 07:00:00';
您可以使用from_unixtimestap。然而,人们普遍认为日期格式更容易阅读


注意:我将最后一个条件改为严格不等式。如果恰好在2017-02-12 07:00:00发生了什么事情,这将为您提供24小时不重复的时间。

在SQL中,文字时间戳值通常以字符串形式提供,格式为“YYYY-MM-DD HH:MM:SS”。MySQL确实允许在实际格式中使用一些纬度。较新版本的MySQL允许分数秒。有关更完整的说明,请参阅MySQL参考手册

例如,MySQL可以识别以下任何一种:

'2017-02-12 09:30:45'
'17-02-12 09:30:45'
170212093045
如果我们需要提供/指定表示自“1970-01-01 00:00:00”以来整数毫秒的文字值,我们可以使用SQL表达式将这些值转换为可与时间戳进行比较的值。作为示范:

 SELECT '1970-01-01' + INTERVAL 1486857600000 / 1000 SECOND AS ts
如果我们需要在WHERE子句中的条件中提供整数毫秒值作为文本,那么我们可以使用上面的表达式

问题中的查询可以执行类似的操作来比较时间戳列中的值

 AND time_stamp >= '1970-01-01' + INTERVAL 1486857600000 / 1000 SECOND 
 AND time_stamp <  '1970-01-01' + INTERVAL 1486944000000 / 1000 SECOND

在SQL中,文字时间戳值通常作为字符串提供,格式为“YYYY-MM-DD HH:MM:SS”。MySQL确实允许在实际格式中使用一些纬度。较新版本的MySQL允许分数秒。有关更完整的说明,请参阅MySQL参考手册

例如,MySQL可以识别以下任何一种:

'2017-02-12 09:30:45'
'17-02-12 09:30:45'
170212093045
如果我们需要提供/指定表示自“1970-01-01 00:00:00”以来整数毫秒的文字值,我们可以使用SQL表达式将这些值转换为可与时间戳进行比较的值。作为示范:

 SELECT '1970-01-01' + INTERVAL 1486857600000 / 1000 SECOND AS ts
如果我们需要在WHERE子句中的条件中提供整数毫秒值作为文本,那么我们可以使用上面的表达式

问题中的查询可以执行类似的操作来比较时间戳列中的值

 AND time_stamp >= '1970-01-01' + INTERVAL 1486857600000 / 1000 SECOND 
 AND time_stamp <  '1970-01-01' + INTERVAL 1486944000000 / 1000 SECOND

您不能使用time_stamp>cast'2017-02-12'作为日期时间吗?这些值是可变的,取自另一个表。这些硬编码的值只是一个例子。你不能使用time_stamp>cast'2017-02-12'作为日期时间吗?这些值是可变的,取自另一个表。那些硬编码的值只是一个例子。我简化了一些东西,因为我想与变量进行比较,变量的值是我从另一个表中获得的,也是时间戳类型的。我简化了一些东西,因为我想与变量进行比较,变量的值是我从另一个表中获得的,也属于时间戳类型