s-s-rS 未显示日期范围内的所有数据
Posted
技术标签:
【中文标题】s-s-rS 未显示日期范围内的所有数据【英文标题】:s-s-rS not showing all data between date range 【发布时间】:2021-08-30 19:45:30 【问题描述】:您好,我正在使用 SQL 创建一个报告,显示日期范围之间的 tranx 信息。但是我有一个有趣的问题,我会用下表来说明它
Press | Status | Date |
---|---|---|
AB | Start | 08/01/2021 |
AB | QA Check | 08/02/2021 |
AB | Down | 08/02/2021 |
AB | Start | 08/03/2021 |
AB | Break | 08/05/2021 |
AB | No Data | 08/07/2021 |
AB | Start | 08/07/2021 |
AB | End | 08/10/2021 |
我有一个类似这样的代码:
Select Press, Status, Date
from Table
where Date >= @Date and Date <= @Date
在我的 Sql 开发人员环境中,当我输入 Date >= '08/01/2021' 和 Date
Press | Status | Date |
---|---|---|
AB | Start | 08/01/2021 |
AB | QA Check | 08/02/2021 |
AB | Down | 08/02/2021 |
AB | Start | 08/03/2021 |
AB | Break | 08/05/2021 |
但在我的报告和 s-s-rS 中,我会得到:
Press | Status | Date |
---|---|---|
AB | Start | 08/01/2021 |
AB | QA Check | 08/02/2021 |
AB | Down | 08/02/2021 |
AB | Start | 08/03/2021 |
正如您所注意到的,在 s-s-rS 中 08/05/2021 值没有填充,但在 s-s-rS 中如果我更改增加 >= 一天 "08/06/2021",我将看到显示 08/05/2021 值的结果。我在 s-s-rS 中是否做错了什么?
【问题讨论】:
这是因为时间戳。TRUNC
日期
【参考方案1】:
与您传入的变量相比,您的Date
列的数据类型是什么?它们实际上都是数据类型date
,还是您正在转换/转换一个?以下代码在 SSMS 和 s-s-rS 中都按预期执行(尽管我不在 2008 年)。
DECLARE @t1 TABLE (Press VARCHAR(10) NOT NULL, Status VARCHAR(20) NOT NULL, SDate DATE NOT NULL)
INSERT INTO @t1
VALUES
('AB', 'Start' ,'08/01/2021'),
('AB', 'QA Check', '08/02/2021'),
('AB', 'Down' ,'08/02/2021'),
('AB', 'Start' ,'08/03/2021'),
('AB', 'Break' ,'08/05/2021'),
('AB', 'No Data', '08/07/2021'),
('AB', 'Start', '08/07/2021'),
('AB', 'End' ,'08/10/2021')
Select Press, Status, SDate
from @t1
where SDate >='08/01/2021' and SDate <= '08/05/2021'
以下内容丢失了 08/05/2021 行,因为未指定时间是 12:00:00 AM:
DECLARE @t1 TABLE (Press VARCHAR(10) NOT NULL, Status VARCHAR(20) NOT NULL, SDate DATETIME NOT NULL)
INSERT INTO @t1
VALUES
('AB', 'Start' ,'08/01/2021 5:00:00 AM'),
('AB', 'QA Check', '08/02/2021 5:00:00 AM'),
('AB', 'Down' ,'08/02/2021 5:00:00 AM'),
('AB', 'Start' ,'08/03/2021 5:00:00 AM'),
('AB', 'Break' ,'08/05/2021 5:00:00 AM'),
('AB', 'No Data', '08/07/2021 5:00:00 AM'),
('AB', 'Start', '08/07/2021 5:00:00 AM'),
('AB', 'End' ,'08/10/2021 5:00:00 AM')
Select Press, Status, SDate
from @t1
where SDate >='08/01/2021' and SDate <= '08/05/2021'
【讨论】:
【参考方案2】:您可能只需将Date
列(我猜是日期时间)转换为仅比较日期部分。
Select Press, Status, Date
from Table
where CAST([Date] as date) >= @Date and CAST([Date] as date) <= @Date
或者,如果您的 @Date 参数只是一个日期,那么只需
Select Press, Status, Date
from Table
where CAST([Date] as date) = CAST(@Date as date)
【讨论】:
以上是关于s-s-rS 未显示日期范围内的所有数据的主要内容,如果未能解决你的问题,请参考以下文章