程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 利用SQL找出一個月中有多少個周日

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

編輯:關於SqlServer

  問:我想利用SQL找出在任意一月中的周日的數量。請幫幫我。

  答:以下是一個簡單的技巧:

  確定一個具體的月份,確定這個月的第一天

  使用INTEGERS表生成一系列這個月第一天之後的日期覆蓋這個月所有的日期

  用日期函數確定這一生成日期是否就是周日

  用count()獲取周日的測試結果

  為了創建integers表,用到下列命令:

createtableintegers 
  (iintegernotnullprimarykey);
insertintointegers(i)values(0);
insertintointegers(i)values(1);
insertintointegers(i)values(2);
insertintointegers(i)values(3);
insertintointegers(i)values(4);
insertintointegers(i)values(5);
insertintointegers(i)values(6);
insertintointegers(i)values(7);
insertintointegers(i)values(8);
insertintointegers(i)values(9);

  現在我們假設你要測試的是2006年9月份,所以你確定的日期就是2006-09-01,然後用下面的查詢生成這個月所有的日期。注意:每個數據庫系統都會有不同的日期函數,所以一定要知道怎麼使用你的數據庫系統。這個例子就用到了MySQL語法。

set@day1=’2006-09-01’; 
        
selectdate_add(@day1 
     ,interval10*tens.i+units.iday) 
           asadate 
 fromintegersastens
cross
 joinintegersasunits
wheredate_add(@day1 
     ,interval10*tens.i+units.iday)
  <date_add(@day1 
     ,interval1month)
order
  byadate 

  你會發現這裡有一個ORDER BY子句,所以你可以充分相信該查詢正確生成了這個月所有的日期。現在只需要將函數相加確定一個周六,並且計算的日期。現在只需要將函數相加確定一個周六,並進行計算:

set@day1=’2006-09-01’;     
           
selectcount(
    casewhendayofweek(
     date_add(@day1 
     ,interval10*tens.i+units.iday)
             )=1
      then1elsenullend) assundays 
 fromintegersastens
cross
 joinintegersasunits
wheredate_add(@day1 
     ,interval10*tens.i+units.iday)
  <date_add(@day1 
     ,interval1month) 
Result:
sundays
  4

  非常簡單,不是嗎?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved