日期:2014-05-17  浏览次数:20718 次

我想了好久也没有解决的语句,请各位帮看一下,查询条件应该怎么写
本帖最后由 wensoft80 于 2013-01-16 21:52:19 编辑
在一个表中有两个日期字段:Dt1,Dt2   (Dt1<Dt2)

查询条件也是两个日期:    a,  b    (a<b)

想要查询出来只要 Dt1,Dt2 区间的日期只要部分或全部a,b区间就显示出来:

如:
XH      Dt1               Dt2
0001   2013-01-11         2013-01-16 

如果查询日期a,b
如果是:
2013-01-09    2013-01-13   (Dt1,Dt2 部分在a,b区间)
2013-01-09    2013-01-18   (Dt1,Dt2 全部在a,b区间)
2013-01-12    2013-01-17   (Dt1,Dt2 部分在a,b区间)
2013-01-12    2013-01-15   (Dt1,Dt2 部分在a,b区间)

这几种情况的查询条件都会将该条数据查询出来。麻烦各位大侠们帮看一下,查询条件应该怎么写



------解决方案--------------------
你试试,要不要区分哪行是属于那种情况?
----------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-01-16 22:03:27
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
-- Jun 17 2011 00:57:23 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([XH] varchar(4),[Dt1] datetime,[Dt2] datetime)
insert [huang]
select '0001','2013-01-11','2013-01-16' union all
select '0002','2013-01-08','2013-01-16' union all
select '0003','2013-01-11','2013-01-17' union all
select '0004','2013-01-06','2013-01-13' union all
select '0005','2013-01-19','2013-01-23' union all
select '0006','2013-01-20','2013-01-26'
--------------开始查询--------------------------
--SELECT * FROM huang 
DECLARE @a DATETIME
DECLARE @b DATETIME
SET @a='2013-01-10'
SET @b='2013-01-15'
select *,'' from [huang]
WHERE DT1<=@b AND DT2>=@a  
----------------结果----------------------------
/* 
XH   Dt1                     Dt2                     
---- ----------------------- ----------------------- ----
0001 2013-01-11 00:00:00.000 2013-01-16 00:00:00.000 
0002 2013-01-08 00:00:00.000 2013-01-16 00:00:00.000 
0003 2013-01-11 00:00:00.000 2013-01-17 00:00:00.000 
0004 2013-01-06 00:00:00.000 2013-01-13 00:00:00.000 

(4 行受影响)
*/