Mysql le you给了我(请参见:(Date,Time)>=('2012-04-16',20:00:00')和(Date,Time)注意,我的查询是关于夜班时间的示例。它们都不等同于您的第一个代码片段。关于性能,我不希望有太大的差异。您对(日期,时间)有复合索引

Mysql le you给了我(请参见:(Date,Time)>=('2012-04-16',20:00:00')和(Date,Time)注意,我的查询是关于夜班时间的示例。它们都不等同于您的第一个代码片段。关于性能,我不希望有太大的差异。您对(日期,时间)有复合索引,mysql,sql,database,Mysql,Sql,Database,le you给了我(请参见:(Date,Time)>=('2012-04-16',20:00:00')和(Date,Time)注意,我的查询是关于夜班时间的示例。它们都不等同于您的第一个代码片段。关于性能,我不希望有太大的差异。您对(日期,时间)有复合索引吗是日期和时间列的日期和时间数据类型吗?或者它们是经过计算的?不确定。试试我的更改-其中有常量值的显式转换。如果它比另一个慢,那么优化器的工作就做得不好。我模糊地记得一些性能问题,但不清楚我们将运行我在其他查询上运行的相同测试,以了解此查询的性


le you给了我(请参见:(Date,Time)>=('2012-04-16',20:00:00')和(Date,Time)注意,我的查询是关于夜班时间的示例。它们都不等同于您的第一个代码片段。关于性能,我不希望有太大的差异。您对
(日期,时间)有复合索引吗
日期
时间
列的
日期
时间
数据类型吗?或者它们是经过计算的?不确定。试试我的更改-其中有常量值的显式转换。如果它比另一个慢,那么优化器的工作就做得不好。我模糊地记得一些性能问题,但不清楚我们将运行我在其他查询上运行的相同测试,以了解此查询的性能:)使用您给我的示例的第一部分(参见:(Date,Time)>=('2012-04-16','20:00:00')和(Date,Time)请注意,我的查询是午夜交接班时的示例。没有一个与您的第一个代码片段相同。关于性能,我不希望有重大差异。您是否有关于
(日期、时间)的复合索引
日期
时间
列的
日期
时间
数据类型吗?或者它们是经过计算的?不确定。试试我的更改-其中有常量值的显式转换。如果它比另一个慢,那么优化器的工作就做得不好。我模糊地记得一些性能问题,但不清楚问:哪个MySQL版本有这个问题?或者它是否仍然存在。
SELECT <select statements>
FROM <from statements>
WHERE
(
    (Date = '2012-04-16' AND Time BETWEEN '08:00:00' AND '20:00:00')
    OR
    (Date = '2012-04-02' AND Time BETWEEN '08:00:00' AND '20:00:00')
);
SELECT <select statements>
FROM <from statements>
WHERE
(
    (
        (Date = '2012-04-16' AND Time >= '20:00:00')
        OR
        (Date = '2012-04-17' AND Time <= '08:00:00')
    )
    OR
    (
        (Date = '2012-04-17' AND Time >= '20:00:00')
        OR
        (Date = '2012-04-18' AND Time <= '08:00:00')
    )
);
    (Date = '2012-04-16' AND Time >= '20:00:00')
    OR
    (Date = '2012-04-17' AND Time <= '08:00:00')
    (Date, Time) >= (DATE('2012-04-16'), TIME('20:00:00'))
    AND 
    (Date, Time) <= (DATE('2012-04-17'), TIME('08:00:00'))
SELECT <select statements>
FROM <from statements>
WHERE
(
    (
        (Date = '2012-04-16' AND Time >= '20:00:00')
        OR
        (Date = '2012-04-17' AND Time <= '08:00:00')
    )
    OR
    .....
    OR 
    (
        (Date = '2012-05-27' AND Time >= '20:00:00')
        OR
        (Date = '2012-05-28' AND Time <= '08:00:00')
    )
)
SELECT <select statements>
FROM <from statements>
  CROSS JOIN
      ( SELECT TIME('20:00:00') AS start_time
             , TIME('08:00:00') AS end_time
      ) AS cc
  JOIN
      ( SELECT d                   AS this_day
             , d + INTERVAL 1 DAY  AS next_day
        FROM
          ( SELECT DATE('2012-04-16') AS d
          UNION ALL
            ...
          UNION ALL
            SELECT '2012-05-27'
          ) AS s 
      ) AS selected
     ON  (Date, Time) >= (selected.this_day, cc.start_time)
     AND (Date, Time) <= (selected.next_day, cc.end_time  )
Select *, Case When Shifts = 'Night' and 
(DATEPART(HOUR,DATEADD(day,1,SystemDate_PST))>='00'               //next day data// 
and DATEPART(HOUR,DATEADD(day,1,SystemDate_PST)) <='06')
THEN DATEADD(DAY,-1, SystemDate_PST) else SystemDate_PST               // to show next day data as current day data//
end as Timings from 
(
Select *,
case 
when DATEPART(HOUR, SystemDate_PST)*60+DATEPART(MINUTE, SystemDate_PST) between
06*60+30 and 14*60+30 then 'Morning'
When DATEPART(HOUR, SystemDate_PST)*60+DATEPART(MINUTE, SystemDate_PST) between
23*60-30 and  23*60+60 then 'Night' 
when datepart(HOUR,dateadd(day,1,SystemDate_PST)) >='00' 
and datepart(HOUR,dateadd(day,1,SystemDate_PST))*60 + DATEPART(MINUTE, SystemDate_PST
<=07*60-30 then 'Night'
else 'Noon' 
end as Shifts from (Select * from Table) a )b