如何使用天数从数据库中检索数据?

时间:2018-03-26 14:04:54

标签: java mysql sql spring hibernate

mysql workbench使用此条件从数据库中检索数据 从星期二晚上5点到星期五下午5点,星期五下午5点到星期二下午5点如何在数据库中写这个查询?

我不应该使用特定的时间和日期来获取数据,它应该是一个自动过程。

没有指定我应该经常得到的日期和时间

可能会被问到,但我得不到我需要的东西。

2 个答案:

答案 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 DATETIMETIMESTAMP列,但它是一个字符数据类型。

并且日期部分未以规范的年 - 月 - 日格式表示,因此字符串比较等同于日期范围比较。

比较'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_timeDATETIME数据类型,我们可以避免包装函数,并且我们可以有一个查询允许MySQL对created_time作为前导列的索引使用范围扫描操作

相关问题