如果我在一个表中有两个日期列,startDate和endDate。如何返回给定日期在这两个日期之间的行?例如:
如果给定日期为2012-10-25
它应该返回以下行
startDate - endDate
2012-10-25 - 2012-10-25
2011-09-10 - 2013-11-15
2012-10-20 - 2012-10-25
2012-10-23 - 2012-10-28
2012-09-14 - 2012-10-28从以下行中:
startDate - endDate
2012-10-25 - 2012-10-25
2011-09-10 - 2013-11-15
2012-01-11 - 2012-10-11
2012-10-20 - 2012-10-25
2012-04-15 - 2012-04-16
2012-05-20 - 2012-05-25
2012-12-01 - 2012-12-10
2012-10-23 - 2012-10-28
2012-09-14 - 2012-10-28
2012-11-13 - 2012-12-15使用sql可以做到这一点吗?
我正在使用sql server 2008。
发布于 2012-10-31 23:11:57
对于SQL Server,它实际上就像下面这样简单:
SELECT startDate, endDate
FROM YourTable
WHERE '2012-10-25' between startDate and endDate发布于 2012-10-31 23:15:45
检查BETWEEN关键字。
语法很简单:
SELECT col1, col2
FROM table1
WHERE '2012-10-25' BETWEEN col1 and col2其中col1和col2分别是开始日期和结束日期。
发布于 2012-10-31 23:50:55
对于其他的lappingcheck,下面可能是有趣的
Select * from sted where [dbo].[F_LappingDays](Startdate,EndDate,'20121025','20121025')=1
CREATE Function [dbo].[F_LappingDays](@Von1 datetime,@bis1 Datetime,@von2 Datetime,@bis2 Datetime) Returns int as
/*
20110531 Thomas Wassermann
Terminüberschneidungen finden
*/
begin
Declare @Result int
Select @Result = 0
if (@Von1>=@Von2) and (@bis1<=@Bis2)
begin
Select @Result=Cast(@Bis1 - @von1 + 1 as Int)
end
else if (@Von1<=@Von2) and (@bis1 > @Von2) and (@bis1<=@Bis2)
begin
Select @Result=Cast(@Bis1 - @von2 + 1 as Int)
end
else if (@Von1>=@Von2) and (@von1<=@bis2) and (@bis1>@Bis2)
begin
Select @Result=Cast(@Bis2 - @von1 + 1 as Int)
end
else if (@Von1<@Von2) and (@bis1>@Bis2)
begin
Select @Result=Cast(@Bis2 - @von2 + 1 as Int)
end
Return @Result
end https://stackoverflow.com/questions/13161044
复制相似问题