TechTarget中国网站推荐

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

2008-9-4  选择字号:  | |
打印本文章
【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:
我有一个字符串清单(不在表中)如下……,我的T1表有一个VARCHAR x。在x.列里的数据如下所示……,因为在表中不包含 'bbbbb',所以我想用一个查询将 'bbbbb'放入查询中。
我想把这些日期按照月份聚集在一起,这样我们就能查看每个售货员每个月的销售量了。我怎么才能将这些月份的日期聚集在一起呢?
我有一个有关用综合连接语句在不同范畴获取行数的问题……,该查询返回有行的三个stratum/treatment组合,但是没有返回没有行的一个组合。我尝试用对该值用……
我想在SQL CASE表达式中返回THEN语句的多个值……,如果标记为N,所有检索的员工都属于A类情况,否则就是B或C的。但是由于我的是'B,C',所以就不能返回任何值……
哪一种SQL查询会帮助我连接两个有不同数据类型的表?例如,我的一个表中有column1和column2这列和三行,第二个表中有column3和column4以及五行。我怎样才能创建……
本篇文章主要介绍SQL Server数据存储的物理对象和原理,包括SQL Server 2005和2008里的物理数据存储、SQL Server 2008数据类型(即Datetime、字符串、自定义及等)、在SQL Server数据库中加强数据的完整性……
本文为SQL Server 2008初学者指南,主要介绍SQL Server2008 T-SQL支持的基本元素和基本操作。
本篇技术专题主要内容包括SQL Server整合、SQL Server数据库设计灾难、SQL Server数据库查询设计以及SQL Server数据库同步、复制、报告显示。
最新更新
专家答疑
技巧
Brian Peasland
我在使用这个工具的时候就出现了以上的错误。由于出现了这个错误,我就没有顺利地完成备份。你能告诉我是什么原因吗?
Rudy Limeback
我想把这些日期按照月份聚集在一起,这样我们就能查看每个售货员每个月的销售量了。我怎么才能将这些月份的日期聚集在一起呢?
Maria Anderson
我得到了一个错误信息,如“DIM-00019:创建服务错误。”我用你寄给我的解决方案解决这一问题,即:“手动创建和启动服务。”你能告诉我如何手动安装该服务吗?