Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date - Fatal编程技术网

MySQL:选择特定时间之间的数据 问题:

MySQL:选择特定时间之间的数据 问题:,mysql,date,Mysql,Date,我想选择10月、11月每天06:45到07:15之间的所有数据(行) 信息 表中的时间戳格式为:“yyyy-mm-dd hh:mm:ss.000” 记录的每个数据都有一个开始时间戳列(“开始时间”)和一个结束时间戳列(“结束时间”) 我使用convert_tz将“gmt”转换为“us/eastern” 使用的查询 选择* 从…起 表1 哪里 不是( (小时(转换时间(从格林尼治标准时间开始,'us/eastern')+分钟(转换时间(从格林尼治标准时间结束,'us/eastern')))“2

我想选择10月、11月每天06:45到07:15之间的所有数据(行)

信息
  • 表中的时间戳格式为:“yyyy-mm-dd hh:mm:ss.000”
  • 记录的每个数据都有一个开始时间戳列(“开始时间”)和一个结束时间戳列(“结束时间”)
  • 我使用convert_tz将“gmt”转换为“us/eastern”
使用的查询
选择*
从…起
表1
哪里
不是(
(小时(转换时间(从格林尼治标准时间开始,'us/eastern')+分钟(转换时间(从格林尼治标准时间结束,'us/eastern')))<06.45和
(小时(换算为“格林尼治标准时间”、“美国/东部时间”结束)+分钟(换算为“格林尼治标准时间”、“美国/东部时间”结束)>07.15
)及
转换时间(从“格林尼治标准时间”、“美国/东部时间”开始)>“2015-10-01 00:00:00.000”和
转换时间(结束于格林尼治标准时间、美国/东部时间)<'2015-12-01 00:00:00.000'
订单开始于,结束于
问题 通过这个查询,我得到的是一整天(从00到23小时)的数据,而不仅仅是我想要的时间段

编辑1:根据@GordonLinoff的答案 质疑,

select
   convert_tz(starts_at,'gmt','us/pacific') as Starts,
   convert_tz(ends_at,'gmt','us/pacific') as Ends
from
   table1
where
   (100 * hour(convert_tz(starts_at,'gmt','us/pacific'))+minute(convert_tz(starts_at,'gmt','us/pacific'))) >= 0645 AND
   (100 * hour(convert_tz(ends_at,'gmt','us/pacific'))+minute(convert_tz(ends_at,'gmt','us/pacific'))) <= 0715 AND
   convert_tz(starts_at,'gmt','us/pacific') > '2015-12-01 00:00:00.000' AND
   convert_tz(ends_at,'gmt','us/pacific') < '2015-12-20 00:00:00.000' 
order by starts_at, ends_at
选择
将_tz(开始于,'gmt','us/pacific')转换为开始,
将_tz(在'gmt'和'us/pacific'结束)转换为结束
从…起
表1
哪里
(100*小时(换算时间(从格林尼治标准时间开始,'us/pacific'))+分钟(换算时间(从格林尼治标准时间开始,'us/pacific'))>=0645和
(100*小时(换算为“格林尼治标准时间”、“美国/太平洋地区”)+分钟(换算为“格林尼治标准时间”、“美国/太平洋地区”))“2015-12-01 00:00:00.000”和
转换时间(结束于格林尼治标准时间、美国/太平洋地区)<'2015-12-20 00:00:00.000'
订单开始于,结束于
和响应(前几行的示例,仅说明获取超出范围的时间戳的问题)

+-------------------------+-------------------------+
|开始|结束|
+-------------------------+-------------------------+
| 2015-12-01 06:45:03.549 | 2015-12-01 06:45:35.003 |
| 2015-12-01 06:45:35.003 | 2015-12-01 06:47:00.203 |
| 2015-12-01 06:47:00.203 | 2015-12-01 06:54:11.615 |
| 2015-12-01 06:47:00.780 | 2015-12-01 06:47:40.860 |
| 2015-12-01 06:47:40.860 | 2015-12-01 06:48:52.103 |
| 2015-12-01 06:48:52.103 | 2015-12-01 06:51:33.925 |
| 2015-12-01 06:51:33.925 | 2015-12-01 06:52:34.543 |
| 2015-12-01 06:52:34.543 | 2015-12-01 07:00:00.000 |
| 2015-12-01 06:54:11.615 | 2015-12-01 06:59:59.074 |
| 2015-12-01 06:59:59.074 | 2015-12-01 07:14:59.074 |
| 2015-12-01 06:59:59.158 | 2015-12-01 07:14:59.158 |
| 2015-12-01 06:59:59.388 | 2015-12-01 07:14:59.388 |
| 2015-12-01 06:59:59.393 | 2015-12-01 07:14:59.393 |
| 2015-12-01 06:59:59.513 | 2015-12-01 07:14:59.513 |
| 2015-12-01 06:59:59.708 | 2015-12-01 07:14:59.708 |
| 2015-12-01 07:00:00.000 | 2015-12-01 07:15:00.000 |
| 2015-12-01 07:00:00.000 | 2015-12-01 07:15:00.000 |
| 2015-12-01 07:00:00.000 | 2015-12-01 07:15:00.000 |
| 2015-12-01 07:00:00.000 | 2015-12-01 07:15:00.000 |
| 2015-12-01 07:00:01.912 | 2015-12-01 07:14:59.471 |
| 2015-12-01 21:59:59.158 | 2015-12-02 00:59:59.158 |
| 2015-12-01 21:59:59.388 | 2015-12-02 06:59:59.388 |
| 2015-12-01 21:59:59.513 | 2015-12-02 06:59:59.513 |
| 2015-12-01 22:00:00.000 | 2015-12-02 01:00:00.000 |
| 2015-12-01 22:00:00.000 | 2015-12-02 01:00:00.000 |
| 2015-12-01 22:43:26.458 | 2015-12-02 05:13:23.365 |
| 2015-12-01 23:15:05.493 | 2015-12-02 05:08:38.585 |
| 2015-12-01 23:18:10.110 | 2015-12-02 05:09:29.648 |
| 2015-12-01 23:31:41.896 | 2015-12-02 00:10:16.796 |
| 2015-12-01 23:45:37.852 | 2015-12-02 00:19:22.301 |
| 2015-12-01 23:53:48.851 | 2015-12-02 00:17:20.538 |
| 2015-12-02 06:51:11.221 | 2015-12-02 06:51:16.456 |
| 2015-12-02 06:51:16.456 | 2015-12-02 07:01:19.435 |
只有2100到0045范围内的时间戳在整个数据集中不断重复。

尝试以下方法:

select *
from
  table1
where
  NOT(
  (time(convert_tz(starts_at,'gmt','us/eastern'))) < '06:45' AND
  (time(convert_tz(ends_at,'gmt','us/eastern'))) > '07:15'
  ) AND
  convert_tz(starts_at,'gmt','us/eastern') > '2015-10-01 00:00:00.000' AND
  convert_tz(ends_at,'gmt','us/eastern') < '2015-12-01 00:00:00.000'
order by starts_at, ends_at      
选择*
从…起
表1
哪里
不是(
(时间(转换时间(从“格林尼治标准时间”、“美国/东部时间”开始)<'06:45'和
(时间(转换时间(结束于格林尼治标准时间,'us/eastern'))>'07:15'
)及
转换时间(从“格林尼治标准时间”、“美国/东部时间”开始)>“2015-10-01 00:00:00.000”和
转换时间(结束于格林尼治标准时间、美国/东部时间)<'2015-12-01 00:00:00.000'
订单开始于,结束于

小时
+
分钟
将是介于0(午夜)和82(23+59)之间的值。此外,值不能同时是
<6.45
>7.15

有几种方法可以满足您的需求。以下是您方法的要点:

  (100 * hour(convert_tz(starts_at,'gmt','us/eastern')+minute(convert_tz(ends_at,'gmt','us/eastern'))) >= 0645 AND
  (100 * hour(convert_tz(ends_at,'gmt','us/eastern'))+minute(convert_tz(ends_at,'gmt','us/eastern'))) <= 0715
  ) AND
(100*小时(转换时间(从格林威治标准时间开始,'us/eastern')+分钟(转换时间(从格林威治标准时间结束,'us/eastern'))>=0645和

(100*hour(convert_-tz(结束于,'gmt','us/eastern'))+min(convert_-tz(结束于,'gmt','us/eastern'))提取时间并将其转换为分钟

SELECT 
      * 
FROM
     table1
WHERE
      HOURS(starts_at) * 60 + MINUTES(starts_at) >= 405
  And HOURS(ends_at) * 60   + MINUTES(ends_at)   <= 435
order by
starts_at,ends_at
选择
* 
从…起
表1
哪里
小时(开始时间)*60+分钟(开始时间)>=405

和小时(结束时间)*60+分钟(结束时间)谢谢!但使用“时间”功能对我不起作用。它再次返回从0000小时起的所有值。谢谢!您的信息有效,但它也给我提供了超出我选择范围的时间戳。注意:只有从2100小时到0030小时(第二天)的时间戳继续超出范围。否则,我只会得到0645到0715之间的时间戳。@shriramks…您应该用示例数据和所需结果编辑您的问题。我删除了以前的注释,因为我让查询正常工作了!谢谢!做了一个更改:
(小时(转换时间(从,'gmt','us/central'))*60分钟(转换时间)(从“格林尼治标准时间”、“美国/中部”开始)
SELECT 
      * 
FROM
     table1
WHERE
      HOURS(starts_at) * 60 + MINUTES(starts_at) >= 405
  And HOURS(ends_at) * 60   + MINUTES(ends_at)   <= 435
order by
starts_at,ends_at