如何解决如何在日期范围之间查询
我正在查询一个包含以下格式返回的时间列的表:
2020-12-30 18:26:23.537
2020-12-30 17:43:19.707
2020-12-30 15:36:13.653
2020-12-30 15:35:23.160
2020-12-30 15:23:33.063
2020-12-30 15:22:42.243
2020-12-30 15:18:26.230
2020-12-30 15:15:20.083
2020-12-30 15:13:08.813
当我查询此列的格式时,它显示为日期时间。更新:
使用此查询返回日期时间:
SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'vStatusMessagesWithStrings' AND COLUMN_NAME = 'TIme'
我尝试通过多种方式通过 where 语句缩小结果范围,但每次运行它时,我只会得到看起来像是返回的所有日期,一直追溯到 7 月。
我试过只使用 >= and <=
,我也试过使用“Between”,但没有任何效果。
我已经尝试将字符串作为 20201228
作为 2020-12-28
和作为 2020/12/30
但没有帮助。
我读到,在您之间使用时,您还需要指定时间,因此我已尝试将其精确到毫秒,但仍会返回所有内容。我试过对日期字符串进行强制转换和转换,但没有任何效果。
以下是我在 where 语句中尝试过的不同格式的几个示例:
and (sms.[Time] <= (convert(date,'20201228')) and SMS.[TIME] >= (convert(date,'20201222')))
and (sms.[Time] >= '20201222' and SMS.[Time] <= '20201228')
and ((sms.[Time] >= Cast('20201222' as DateTime)) and (SMS.[Time] <= Cast('20201228' as DateTime)))
and (sms.[Time] Between Cast('20201222 00:00:00.000' as DateTime) and Cast('20201228 00:00:00.000' as DateTime))
and (sms.[Time] Between Cast('2020-12-22 00:00:00.000' as DateTime) and Cast('2020-12-28 00:00:00.000' as DateTime))
and ((sms.[Time] >= Cast('2020-12-22 00:00:00.000' as DateTime)) and sms.[Time] <= Cast('2020-12-28 00:00:00.000' as DateTime))
and ((sms.[Time] >= '2020-12-22' ) and (sms.[Time] <= '2020-12-28'))
解决方法
一定有其他事情发生,因为你说你尝试过的每个例子都对我有用,例如
declare @Test table ([time] datetime);
insert into @Test ([Time])
values
('2020-12-21T18:26:23.537'),('2020-12-22T17:43:19.707'),('2020-12-23T15:36:13.653'),('2020-12-24T15:35:23.160'),('2020-12-25T15:23:33.063'),('2020-12-26T15:22:42.243'),('2020-12-27T15:18:26.230'),('2020-12-28T15:15:20.083'),('2020-12-29T15:13:08.813');
select *
from @Test sms
where sms.[Time] between cast('2020-12-22T00:00:00.000' as datetime) and cast('2020-12-28T00:00:00.000' as datetime);
返回:
时间 |
---|
2020-12-22 17:43:19.707 |
2020-12-23 15:36:13.653 |
2020-12-24 15:35:23.160 |
2020-12-25 15:23:33.063 |
2020-12-26 15:22:42.243 |
2020-12-27 15:18:26.230 |
注意,使用 between
时需要小心,因为它用作 >=
第一限制和 <=
第二限制,这可能会产生意想不到的结果。尤其是在这种情况下,您有时间组件。
就我个人而言,我总是使用以下模式来确保我得到我要求的确切日期:
select *
from @Test sms
where sms.[Time] >= cast('2020-12-22T00:00:00.000' as datetime) and sms.[Time] < dateadd(day,1,cast('2020-12-28T00:00:00.000' as datetime));
返回:
时间 |
---|
2020-12-22 17:43:19.707 |
2020-12-23 15:36:13.653 |
2020-12-24 15:35:23.160 |
2020-12-25 15:23:33.063 |
2020-12-26 15:22:42.243 |
2020-12-27 15:18:26.230 |
2020-12-28 15:15:20.083 |
您会注意到现在包含第 28 个,而上一个查询没有。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。