我有一个日期集合,其中包含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
列,从,到
答案 0 :(得分:0)
首先,我建议您不要将列命名为,因为它是表选择的受保护标识符。 我不知道SQL是否会让你为列命名,但如果你这样做,我会尽快重命名。它将使您的代码更具可读性,如果没有别的话。
通常尽量避免在编码中使用与强类型单词匹配的名称。你最终会为自己省下很多眼泪。
让我们说你的桌子是:
表SearchByDateTime
然后你的查询将是(以伪代码形式):
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