如何计算指定时间段的周末天数

January 6th, 2009 · No Comments


这是SQL Anywhere新闻组中“通用”组的一个问题:

问:如何能够得到一个时间段内的周六和周日的天数呢?例如,在2007-12-142008-01-29之间。

答:SELECT语句可以这样完成:

SELECT COUNT(*)
FROM ( SELECT DATEADD (
               DAY, day_generator.row_num, 2007-12-14)
               AS generated_date
       FROM sa_rowgenerator (
               0, DATEDIFF ( DAY, 2007-12-14, 2008-01-29 ) )
            AS day_generator )
   AS date_generator
WHERE DOW ( date_generator.generated_date ) IN ( 1, 7 );

工作原理:

DATEDIFF(…)函数返回两个日期之间的总天数。

FROM sa_rowgenerator(…)过程调用生成结果集row_num = 0,1,2,…至总天数。

DATEADD(…)调用使用row_num来计算时间段内的每个日期。

DOW(…)调用返回一个星期中的每天编号,周日为1,周六为7,以此类推。

SELECT COUNT(*)…WHERE最后返回周六和周日的天数。

10-09 06:40