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