mysql workbench使用此条件从数据库中检索数据 从星期二晚上5点到星期五下午5点,星期五下午5点到星期二下午5点如何在数据库中写这个查询?
我不应该使用特定的时间和日期来获取数据,它应该是一个自动过程。
没有指定我应该经常得到的日期和时间
可能会被问到,但我得不到我需要的东西。
答案 0 :(得分:0)
如果您没有准确地询问您的尝试或至少Minimal, complete and verifiable example,那么根本无法帮助您找到有用的答案。
但我会尝试:
select Dayofweek(date), time(date) , date
from `table` t
where Dayofweek(date) >= 3
and Dayofweek(date) <= 6
and ((Dayofweek(date) = 3 and time(date) > '17:00:00') or
(Dayofweek(date) = 6 and time(date) < '05:00:00') or
(Dayofweek(date) > 3 and Dayofweek(date) < 6 ))
在sql fiddle上查看。
答案 1 :(得分:0)
我认为这里最大的问题是created_time
的表示。
看起来不是一个MySQL DATETIME
或TIMESTAMP
列,但它是一个字符数据类型。
并且日期部分未以规范的年 - 月 - 日格式表示,因此字符串比较等同于日期范围比较。
比较'dd-mm-yyyy'&gt; = '20 -03-2018',我们将在每个月的第21天,第22天,第28天,第29天,第30天进行比较年。
e.g。用于字符串比较,
'22-01-2018' > '20-03-2018'
尽管1月1日不是3月20日之后。在比较字符串时,我们是逐字符比较,而不是查看“日期”比较。
不改变数据结构......如果created_time
列以'dd-mm-yyyy hh:mi'
格式存储为字符串,那么在查询中,我们可以将字符串转换为DATETIME
数据类型使用STR_TO_DATE
函数...
或者,也许我正在咆哮错误的树。
参考文献:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
作为示范:
SELECT STR_TO_DATE('20-03-2018 20:13','%d-%m-%Y %H:%i')
作为星期二下午5点到星期五下午5点检索的例子:
SELECT ...
FROM fb
WHERE STR_TO_DATE( fb.created_time ,'%d-%m-%Y %H:%i') >= '2018-03-20 17:00'
AND STR_TO_DATE( fb.created_time ,'%d-%m-%Y %H:%i') < '2018-03-23 17:00'
性能说明:此查询模式强制MySQL评估STR_TO_DATE
中每一行的fb
函数(完整扫描)。如果created_time
是DATETIME
数据类型,我们可以避免包装函数,并且我们可以有一个查询允许MySQL对created_time
作为前导列的索引使用范围扫描操作