【发布时间】:2012-01-11 14:02:14
【问题描述】:
在我的表格中,我有 118 条详细记录项目的记录。我在这里关心的 2 个字段是 startdate 和 enddate。
我需要从此视图生成一份报告,显示在以下日期范围内哪些项目处于“活跃”状态:
01/01/2011 - 01/12/2011
我尝试了以下 WHERE 类:
WHERE startdate BETWEEN '01/04/2011' AND '01/12/2011'
OR enddate BETWEEN '01/04/2011' AND '01/12/2011'
OR startdate <= '01/04/2011' AND enddate >= '01/12/2011'
出现的情况似乎不正确,只显示了几条记录,而我知道应该显示的许多记录不是,例如一个项目的开始日期为 20/07/2011 和结束日期为 21运行 WHERE 查询时 /11/2011 消失。
任何人都可以看到这个 WHERE 查询的错误
【问题讨论】:
-
愚蠢的问题,但是 startdate 和 enddate 的数据类型是什么?
-
使用 VARCHAR 将格式转换为文本:convert(VARCHAR,dbo.tbl_project_data.startdate, 103) AS startdate, convert(VARCHAR,dbo.tbl_project_data.enddate, 103) AS enddate,
-
表中的底层数据类型是什么?不是您将其转换为的基本类型?
SELECT ISC.TABLE_SCHEMA, ISC.TABLE_NAME, ISC.COLUMN_NAME, ISC.DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS ISC WHERE ISC.column_name IN ('startdate', 'enddate') -
请记住,SQL 将时间存储为日期的一部分,因此如果您使用 GetDate() 或类似方法来填充字段值,那么还有一个时间部分。 2011 年 1 月 12 日被视为 2011 年 1 月 12 日午夜。如果在 1 月 12 日上午 10:00 使用 Getdate() 填充了日期字段,则它不会出现在查询中。
-
我不知道,但格式是这样的:2008-01-02 00:00:00.000
标签: sql sql-server syntax reporting-services where-clause