计算日期段内有几个星期几(SQL, Delphi) ,日期段内有几个星期天
2009-04-27 16:10
246 查看
declare @StartDate datetime
declare @EndDate datetime
declare @WeekDay INT, @WeekNum INT
set @StartDate = '2009-10-4'
set @EndDate = '2009-10-25'
set @StartDate = '2009-10-1'
set @EndDate = '2009-10-2'
set @StartDate = '2009-10-3'
set @EndDate = '2009-10-4'
SET @WeekDay = 1 --星期天
SELECT @WeekNum=datediff(day
,case
when DATEPART(weekday,@StartDate) = @WeekDay then @StartDate - 1
else @StartDate
end
,case
when DATEPART(weekday,@EndDate) = @WeekDay then @EndDate + 1
else @EndDate
end
) / 7
IF DATEPART(weekday,@StartDate)=@WeekDay
SELECT @WeekNum = @WeekNum + 1
ELSE IF (@EndDate > @StartDate) AND (DATEPART(weekday,@EndDate) = @WeekDay)
SELECT @WeekNum = @WeekNum + 1
SELECT @WeekNum
-----Delphi
function WeekDayCount(pvDate1, pvDate2: TDateTime; pvWeekDay: Integer): Integer;
var
lvDate1, lvDate2: TDateTime;
lvWeekNum: Real;
lvDay: Integer;
begin
lvDate1 := Trunc(pvDate1);
lvDate2 := Trunc(pvDate2);
if DayOfWeek(pvDate1) = pvWeekDay then lvDate1 := IncDay(lvDate1, -1);
if DayOfWeek(lvDate2) = pvWeekDay then lvDate2 := IncDay(lvDate2, +1);
//相差的天数是是多少个星期
Result := Trunc(WeekSpan(lvDate1, lvDate2));
//如果最后一天是那天则加1,注意是pvDate2不是lvDate2
if DayOfWeek(pvDate1) = pvWeekDay then Inc(Result)
else if pvDate2 > pvDate1 then
if DayOfWeek(pvDate2) = pvWeekDay then Inc(Result);
end;
type
TWeekDay = 1..7;
TWeekDays = set of TWeekDay;
function WeekDayCountEx(pvDate1, pvDate2: TDateTime; pvWeekDays: TWeekDays):
Integer;
var
lvDate1, lvDate2, lvTempDate: TDateTime;
begin
lvDate1 := Trunc(pvDate1);
lvDate2 := Trunc(pvDate2);
lvTempDate := lvDate1;
Result := 0;
while lvTempDate <= lvDate2 do
begin
if DayOfWeek(lvTempDate) in pvWeekDays then Inc(Result);
lvTempDate := IncDay(lvTempDate, 1);
end;
end;
declare @EndDate datetime
declare @WeekDay INT, @WeekNum INT
set @StartDate = '2009-10-4'
set @EndDate = '2009-10-25'
set @StartDate = '2009-10-1'
set @EndDate = '2009-10-2'
set @StartDate = '2009-10-3'
set @EndDate = '2009-10-4'
SET @WeekDay = 1 --星期天
SELECT @WeekNum=datediff(day
,case
when DATEPART(weekday,@StartDate) = @WeekDay then @StartDate - 1
else @StartDate
end
,case
when DATEPART(weekday,@EndDate) = @WeekDay then @EndDate + 1
else @EndDate
end
) / 7
IF DATEPART(weekday,@StartDate)=@WeekDay
SELECT @WeekNum = @WeekNum + 1
ELSE IF (@EndDate > @StartDate) AND (DATEPART(weekday,@EndDate) = @WeekDay)
SELECT @WeekNum = @WeekNum + 1
SELECT @WeekNum
-----Delphi
function WeekDayCount(pvDate1, pvDate2: TDateTime; pvWeekDay: Integer): Integer;
var
lvDate1, lvDate2: TDateTime;
lvWeekNum: Real;
lvDay: Integer;
begin
lvDate1 := Trunc(pvDate1);
lvDate2 := Trunc(pvDate2);
if DayOfWeek(pvDate1) = pvWeekDay then lvDate1 := IncDay(lvDate1, -1);
if DayOfWeek(lvDate2) = pvWeekDay then lvDate2 := IncDay(lvDate2, +1);
//相差的天数是是多少个星期
Result := Trunc(WeekSpan(lvDate1, lvDate2));
//如果最后一天是那天则加1,注意是pvDate2不是lvDate2
if DayOfWeek(pvDate1) = pvWeekDay then Inc(Result)
else if pvDate2 > pvDate1 then
if DayOfWeek(pvDate2) = pvWeekDay then Inc(Result);
end;
type
TWeekDay = 1..7;
TWeekDays = set of TWeekDay;
function WeekDayCountEx(pvDate1, pvDate2: TDateTime; pvWeekDays: TWeekDays):
Integer;
var
lvDate1, lvDate2, lvTempDate: TDateTime;
begin
lvDate1 := Trunc(pvDate1);
lvDate2 := Trunc(pvDate2);
lvTempDate := lvDate1;
Result := 0;
while lvTempDate <= lvDate2 do
begin
if DayOfWeek(lvTempDate) in pvWeekDays then Inc(Result);
lvTempDate := IncDay(lvTempDate, 1);
end;
end;
相关文章推荐
- Delphi中使用动态SQL的几个问题
- sql计算(,1,2,3,4,)中有几个数字
- T-SQL 2 Tips: 1.计算任意两日期之间的"周一"到"周日"分别各有几个! 2.根据出生日期计算精确年龄!
- 如何计算某时间段内有几个星期几?
- 怎么计算末年某月某天有几个星期天公司
- T-SQL 2 Tips: 1.计算任意两日期之间的"周一"到"周日"分别各有几个! 2.根据出生日期计算精确年龄!
- SQL 10 函数 3 日期时间函数 - 6 计算一个日期是星期几
- sql 计算星期几
- sql计算任意两日期之间的"周一"到"周日"分别各有几个
- SQL中常用的日期计算
- 几个获取Windows系统信息的Delphi程序
- sql时间转换与计算
- 动态拼接SQL计算公式
- 枚举法计算全年周内星期几的次数
- SQL 按时间段分组计算 SPT_VALUES 使用
- 几个简单的基本的sql语句
- (轉)如何计算Oracle内存中的几个命中率
- sql语句里几个常用关键字
- ERP成本计算的几个方式
- 几个代码片段-计算程序运行时间+获得当前目录+生成MD5