这是SQL Anywhere新闻组中“通用”组的一个问题:
问:如何能够得到一个时间段内的周六和周日的天数呢?例如,在2007-12-14与2008-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最后返回周六和周日的天数。