sql server 日期范围查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 日期范围查询相关的知识,希望对你有一定的参考价值。
参考技术ASELECT * FROM 表明 WHERE 日期字段名 BETWEEN '20130101' AND '20130130'
或者:
SELECT * FROM 表明 WHERE 日期字段名 BETWEEN CONVERT(datetime,'2013-01-01',120) AND CONVERT(datetime,'2013-01-30',120)
扩展资料:
注意事项
在写按时间段查询的sql语句的时候 一般我们会这么写查询条件:
where date>='2010-01-01' and date<='2010-10-1'。
但是在实执行Sql时些语句会转换成这样:
where date>='2010-01-01 0:00:00' and date<='2010-10-1:0:00:00',再看这个条件的话,就会有些明白,那就是'2010-10-1 0:00:00' 之后的数据例如('2010-10-1:08:25:00')查不到,也就是说2010-10-1的数据查不到。
修改查询条件为:
where date>='2010-01-01' and date<='2010-10-1 23:59:59' 或 where date>='2010-01-01' and date<='2010-10-2'。
某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放
在 SQL Server 中合并重叠的日期范围
【中文标题】在 SQL Server 中合并重叠的日期范围【英文标题】:Combine overlapping date ranges in SQL Server 【发布时间】:2011-08-10 17:41:05 【问题描述】:我有一个表,其中包含数百万行,要求日期跨度与某个“合同编号”和“服务代码”不重叠。通常有 2-4 行的日期重叠,必须合并到一条记录中。不重叠的记录不应合并,应保持间隙。
ContractNumber ServiceCode StartDate EndDate
1111111 AFL 2010-01-01 2010-12-31
1111111 AFL 2011-01-01 2011-12-31
1111111 AFL 2011-04-01 2012-03-31
1111111 AFL 2011-04-01 2012-06-30
1111111 AFL 2013-01-01 2013-12-31
这些必须组合成:
ContractNumber ServiceCode StartDate EndDate
1111111 AFL 2010-01-01 2010-12-31 (remains the same)
1111111 AFL 2011-01-01 2012-06-30 (merged)
1111111 AFL 2013-01-01 2013-12-31 (gap maintained)
另外,我已经看过这个问题:Eliminate and reduce overlapping date ranges。它在数据子集下工作,但是一旦我在我拥有的所有数据上释放它,它就真的很慢。我需要在几分钟内运行数百万行的东西。有什么想法吗?
【问题讨论】:
【参考方案1】:在这些问题上花费了很多时间,我认为保持数据干净、没有重叠比从大表中消除它们更有效。约束使我们能够有效地做到这一点:Contiguous Time Periods
【讨论】:
您的建议并不能真正解决我的问题。我显然知道清理数据是最好的选择,但业务需求阻止了我这样做。 @rwponu:祝你好运,但据我所知,没有快速简便的解决方案。 Adam Machanic 在这种情况下推荐了 CLR,但他说他需要编写大量复杂的 C# 代码来解决这个问题。以上是关于sql server 日期范围查询的主要内容,如果未能解决你的问题,请参考以下文章