搜索日期

时间:2018-01-29 11:44:10

标签: mysql

我有一个日期集合,其中包含from和to

 from                       to
2018-01-24 14:02:00 | 2018-01-29 16:02:00
2018-01-25 16:02:00 | 2018-01-29 16:02:00
2018-01-26 14:02:00 | 2018-01-29 16:02:00
2018-01-27 14:02:00 | 2018-01-30 16:02:00

已编辑:我的参数只有1个值,即今天的日期时间

我想在此搜索from和to中的日期时间 我怎么能这样做?

表:tbl_announcements 列,从,到

2 个答案:

答案 0 :(得分:0)

首先,我建议您不要将列命名为,因为它是表选择的受保护标识符。 我不知道SQL是否会让你为列命名,但如果你这样做,我会尽快重命名。它将使您的代码更具可读性,如果没有别的话。

通常尽量避免在编码中使用与强类型单词匹配的名称。你最终会为自己省下很多眼泪。

让我们说你的桌子是:

表SearchByDateTime

Id(PK)| FromDate | ToDate |

然后你的查询将是(以伪代码形式):

declare @targetDate Datetime;

Set @targetDate = "2017-01-01 00:00:00"

Select * from SearchByDateTime sbdt

where sbdt.FromDate >= @targetDate and  sbdt.ToDate <= @targetDate 

如果您有两个目标值,也可以这样做:

declare @targetDateBegin Datetime;
declare @targetDateEnd Datetime;

Set @targetDateBegin = "2017-01-01 00:00:00"
Set @targetDateBegin = "2017-02-01 00:00:00"


where sbdt.FromDate >= @targetDateBegin and   sbdt.ToDate <= @targetDateEnd

但是你的问题并不是特别具体,如果你澄清一下,我的回答会更加准确......

答案 1 :(得分:0)

如上所述

 from                       to
2018-01-24 14:02:00 | 2018-01-31 16:02:00
2018-01-25 16:02:00 | 2018-01-31 16:02:00
2018-01-26 14:02:00 | 2018-01-31 16:02:00
2018-01-27 14:02:00 | 2018-01-31 16:02:00

假设我的日期为2018-01-28 00:00:00

where sbdt.FromDate >= @targetDateBegin and sbdt.ToDate <= @targetDateEnd

这不起作用,因为

sbdt.FromDate >= 2018-01-28 00:00:00什么都不是真的看

2018-01-24 14:02:00 >= 2018-01-28 00:00:00 false
2018-01-25 16:02:00 >= 2018-01-28 00:00:00 false
2018-01-26 14:02:00 >= 2018-01-28 00:00:00 false
2018-01-27 14:02:00 >= 2018-01-28 00:00:00 false

所有日期都小于参数日期

sbdt.ToDate <= 2018-01-28 00:00:00什么都不是真的看

2018-01-31 16:02:00 <= 2018-01-28 00:00:00 false
2018-01-31 16:02:00 <= 2018-01-28 00:00:00 false
2018-01-31 16:02:00 <= 2018-01-28 00:00:00 false
2018-01-31 16:02:00 <= 2018-01-28 00:00:00 false

所有日期都大于参数日期

该逻辑仅在我将其与特定日期进行比较时才有效,但我有2个日期范围

但感谢上帝,我找到了一个非常简短的解决方案,使用

2018-01-28 00:00:00 between sbdt.FromDate and sbdt.ToDate如果我只将其与某个特定日期进行比较,但我有2个日期范围

但感谢上帝,我找到了一个非常简短的解决方案,使用

2018-01-28 00:00:00 between sbdt.FromDate and sbdt.ToDate