RSS订阅
RSS订阅TT数据库

利用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 

  非常简单,不是吗?

还没有登录? 阅读全文请先登录或注册
用户名:(请填写您的E-mail做为登录账号)
  • 获取最新的IT业界资讯、市场动态、行业趋势等独家原创内容。
  • 分享国内外技术专业人士提供的技巧经验。
  • 利用专注IT的技术资源中心,不断更新专业知识。
  • 享受白皮书、Webcast等系列特色增值服务。
  • 免费参加TT中国举办的各种会员活动。
  • 更多的精彩服务,在不断开发中……
用户名:(请填写您的E-mail)
密 码:
 永久登录
请输入您的登录email:
为什么要使用DECODE函数来减少处理时间?如果你有简单无关联的数据库应该怎么处理?如何删除重复记录?
如何选择适合的Oracle优化器?访问Table的方式有哪些?共享的SQL语句必须符合那些条件?作者在本文中详细介绍了这些方面的内容。
Oracle 11g的新特性自适应游标共享为包含有绑定变量的SQL语句有效共享执行计划提供了一个更简单的方法,但只有绑定变量有值时才有意义,自适应游标共享有时……
Oracle 11g提供自适应游标共享(ACS)以克服不该共享时的游标共享,ACS使用了两个新的度量机制:绑定敏感度和绑定感知。
任何SQL语句优化引擎的核心是判定获得SQL语句目标数据的最廉价和最有效的访问路径的能力,使用绑定变量可以限制需要存储在库缓存中返回相似结果集的SQL语句游标的数量。

本专题介绍了SQL Server服务代理相关方面的知识,包括SQL Server服务代理基础知识的概述、消息类型、契约、队列、服务和路由、SEND命令和RECEIVE命令、性能方面的改进以及对运行状况的监控等等。

无论你是否计划将SQL Server数据库转换服务(DTS)包迁移到SQL Server集成服务(SSIS)或在SQL Server 2005里运行DTS包,都需要专家的一些建议。这一指南主要是包括SSIS的相关基础知识、技巧帮助你进行SSIS调整,还介绍了SSIS有经验的一些用户的具体信息等等。

子查询是一个嵌套在SELECT、INSERT、UPDATE 或DELETE语句,或者另一个子查询里的查询。一个子查询可以返回一行或多行结果给父查询。标量子查询是只返回一个值的查询:只有一个字段的一行记录。标量子查询可以在SQL语句的大多数位置,其中你可以使用一个表达式或一个实际值。
最新更新
专家答疑
技巧
Michael Hillenbrand
你能解释一下数据库公程师、数据库架构师以及数据库管理员之间有什么区别吗?数据库管理员:这是目前最普遍使用的对从事数据库相关的工作的人的头衔。数据库管理员是指……
Brian Peasland
对5GB大小的Oracle 7.3存档或删除的最佳办法是什么?为了便于管理机构查询,这些数据至少需要再用20年的时间。我们担心将来我们不能对它重新获取并迁入一个更新的……
Rudy Limeback
如何创建一个约束限制2007年1月1日之前的日期被录入?用CHECK约束就可以。如下面的示例……