利用SQL找出一个月中有多少个周日

2008-9-4   
   | |

导读:利用SQL找出在任意一月中的周日的数量的简单的技巧:确定一个具体的月份,确定这个月的第一天、使用INTEGERS表生成一系列这个月第一天之后的日期覆盖这个月所有……

关键词:Oracle SQL Oracle开发语言

正在加载数据... 【TechTarget中国原创】我想利用SQL找出在任意一月中的周日的数量。请帮帮我。答:确定一个具体的月份,确定这个月的第一天、使用INTEGERS表生成一系列这个月第一天之后的日期覆盖这个月所有的日期、用日期函数确定这一生成日期是否就是周日以及用count()获取周日的测试结果。

【TechTarget中国原创】问:我想利用SQL找出在任意一月中的周日的数量。请帮帮我。

  答:以下是一个简单的技巧:

  确定一个具体的月份,确定这个月的第一天
  使用INTEGERS表生成一系列这个月第一天之后的日期覆盖这个月所有的日期
  用日期函数确定这一生成日期是否就是周日
  用count()获取周日的测试结果

  为了创建integers表,用到下列命令:


create table integers 
     ( i integer not null primary key );
insert into integers (i) values (0);
insert into integers (i) values (1);
insert into integers (i) values (2);
insert into integers (i) values (3);
insert into integers (i) values (4);
insert into integers (i) values (5);
insert into integers (i) values (6);
insert into integers (i) values (7);
insert into integers (i) values (8);
insert into integers (i) values (9);

  现在我们假设你要测试的是2006年9月份,所以你确定的日期就是2006-09-01,然后用下面的查询生成这个月所有的日期。注意:每个数据库系统都会有不同的日期函数,所以一定要知道怎么使用你的数据库系统。这个例子就用到了MySQL语法。

set @day1 = ’2006-09-01’;  
               
select date_add(@day1 
          , interval 10*tens.i + units.i day ) 
                      as adate 
  from integers as tens
cross
  join integers as units
 where date_add(@day1 
          , interval 10*tens.i + units.i day )
     < date_add(@day1 
          , interval 1 month )
order
    by adate  

  你会发现这里有一个ORDER BY子句,所以你可以充分相信该查询正确生成了这个月所有的日期。现在只需要将函数相加确定一个周六,并且计算的日期。现在只需要将函数相加确定一个周六,并进行计算:

set @day1 = ’2006-09-01’;         
                      
select count(
        case when dayofweek(
          date_add(@day1 
          , interval 10*tens.i + units.i day )
                           ) = 1
             then 1 else null end )  as sundays 
  from integers as tens
cross
  join integers as units
 where date_add(@day1 
          , interval 10*tens.i + units.i day )
     < date_add(@day1 
          , interval 1 month )  
Result:
sundays
    4 

  非常简单,不是吗?

 
查看全文
 
 
 
 
 

Oracle SQL

 
微软和Quest公司正准备推出一款产品,通过这一产品,数据库开发人员可以使用Microsoft Visual Studio 2010对Oracle数据库进行开发和管理。
 
Oracle Application Express(Oracle APEX)设计的一个主要目标是:快速构建基于Oracle数据库的Web应用程序。
 
SELECT子句通常是一个SELECT语句的第一个子句。它标识出你所想要包含到结果集中的列。这些列是从在FROM子句中指定的基表中返回的。
 
没有ORDER BY子句,Oracle不会保证行显示的顺序。它们可能是按照你想要的顺序排列,但也可能不是。
 
Toad For Oracle的产品策略就是为Oracle开发一款工具,它可以满足不同人的不同需求,比如DBA、开发人员、分析师以及管理者等等。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录