1. 程式人生 > >sql算某段時間有幾個星期一,取本月所有的週三, 取上個月所有的週三 etc

sql算某段時間有幾個星期一,取本月所有的週三, 取上個月所有的週三 etc

sql算某段時間有幾個星期一

DECLARE @t TABLE(dt DATETIME)
DECLARE @dtStart DATETIME
DECLARE @dtEnd DATETIME

SET @dtStart='2014-10-01'
SET @dtEnd='2014-10-31'

WHILE @dtStart <= @dtEnd
BEGIN
     IF DATEPART(WEEKDAY,@dtStart)=2 INSERT INTO @t SELECT @dtStart
     SET @dtStart=DATEADD(DAY,1,@dtStart)
END

SELECT * FROM @t

 /*

 DATEPART(WEEKDAY,@dtStart)=1  表示週日,星期天
 DATEPART(WEEKDAY,@dtStart)=2  表示週一

 SET @dtStart='2008-06-01'
SET @dtEnd='2008-07-01'

 2008-06-01 00:00:00.000
 2008-06-08 00:00:00.000
 2008-06-15 00:00:00.000
 2008-06-22 00:00:00.000
 2008-06-29 00:00:00.000
 */

 /*
 2014-10-06 00:00:00.000
2014-10-13 00:00:00.000
2014-10-20 00:00:00.000
2014-10-27 00:00:00.000
 */
-- 取本月所有的週三
DECLARE @t TABLE(dt DATETIME)
DECLARE @dtStart DATETIME
DECLARE @dtEnd DATETIME

SET @dtStart=CONVERT(datetime,CONVERT(char(8),GETDATE(),120)+'1') -- 取本月第一天 2014-10-01 00:00:00.000  
SET @dtEnd=dateadd(d,-day(getdate()),dateadd(m,1,getdate())) -- 取本月第後一天 2014-10-31 14:10:34.890  

WHILE @dtStart <= @dtEnd
BEGIN
     IF DATEPART(WEEKDAY,@dtStart)=4 INSERT INTO @t SELECT @dtStart
     SET @dtStart=DATEADD(DAY,1,@dtStart)
END

SELECT * FROM @t

 /*

 DATEPART(WEEKDAY,@dtStart)=1  表示週日,星期天
 DATEPART(WEEKDAY,@dtStart)=4  表示週三
 
2014-10-01 00:00:00.000
2014-10-08 00:00:00.000
2014-10-15 00:00:00.000
2014-10-22 00:00:00.000
2014-10-29 00:00:00.000
 */
-- 取上個月所有的週三
DECLARE @t TABLE(dt DATETIME)
DECLARE @dtStart DATETIME
DECLARE @dtEnd DATETIME

SET @dtStart=DATEADD(mm,DATEDIFF(mm,0,dateadd(month,-1,getdate())),0)--上月第一天 
SET @dtEnd=dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))--上月最後一天

WHILE @dtStart <= @dtEnd
BEGIN
     IF DATEPART(WEEKDAY,@dtStart)=4 INSERT INTO @t SELECT @dtStart
     SET @dtStart=DATEADD(DAY,1,@dtStart)
END

SELECT * FROM @t

 /*

 DATEPART(WEEKDAY,@dtStart)=1  表示週日,星期天
 DATEPART(WEEKDAY,@dtStart)=4  表示週三
 
2014-09-03 00:00:00.000
2014-09-10 00:00:00.000
2014-09-17 00:00:00.000
2014-09-24 00:00:00.000

 */
	--計算 某個月所有的星期五

	-- 方法1
	[email protected]的格式應該為 200806
    declare @datestr varchar(10)='201410'  --這裡可以自己改  
    declare @s datetime,@weekdaycount int
    declare @tbl table(date datetime)
    set @[email protected]+'01'
    while @s<dateadd(month,1,@datestr+'01')
    begin
        if datepart(weekday,@s)=6 --這裡可以自己改  6表示為星期五
        insert into @tbl select @s
        set @s=dateadd(day,1,@s)
    end
    --select @weekdaycount=count(*) from @tbl  
    --select @weekdaycount
	select * from @tbl  
/*
2014-10-03 00:00:00.000
2014-10-10 00:00:00.000
2014-10-17 00:00:00.000
2014-10-24 00:00:00.000
2014-10-31 00:00:00.000

(5 行受影響)
*/
-- 計算某個月所有的星期五
DECLARE @t TABLE(dt DATETIME)  
DECLARE @dtStart DATETIME  
DECLARE @dtEnd DATETIME  
  
SET @dtStart='2014-10-01'  
SET @dtEnd='2014-10-31'  
  
WHILE @dtStart <= @dtEnd  
BEGIN  
     IF DATEPART(WEEKDAY,@dtStart)=6 INSERT INTO @t SELECT @dtStart  
     SET @dtStart=DATEADD(DAY,1,@dtStart)  
END  
  
SELECT * FROM @t  
/*
-----------------------
2014-10-03 00:00:00.000
2014-10-10 00:00:00.000
2014-10-17 00:00:00.000
2014-10-24 00:00:00.000
2014-10-31 00:00:00.000

(5 行受影響)
*/

相關推薦

sql時間星期一,本月所有週三, 上個月所有週三 etc

sql算某段時間有幾個星期一 DECLARE @t TABLE(dt DATETIME) DECLARE @dtStart DATETIME DECLARE @dtEnd DATETIME SET @dtStart='2014-10-01' SET @dtEnd='201

java獲取一時間星期

出於專案需求,自己做的筆記 ---------- import java.text.DateFormat; import java.util.Calendar; /** * 給定時間段和星期幾,計算該時間段內共有多少個給定的星期幾 * @param start

sql 通過時間求得改時間內的工作時長,排除工作日

好的 char rup and while 思路 then task 工作日 CREATE FUNCTION Fun_GetTotalHourBySomeTime(@TaskId NVARCHAR(30),@Bu_trupstartDate NVARCHAR(50),@Bu

java根據日期獲取周和獲取時間內周的日期

整理兩個日期的方法。 根據日期獲取當天是周幾 /** * 根據日期獲取當天是周幾 * @param datetime 日期 * @return 周幾 */ public static String dateToWeek(String datetime

PHP執行系統命令的常用的函數

exe 自動 文件操作 nal 外部命令 中間 ring 打開 lcm PHP執行系統命令的有幾個常用的函數,如有:system函數、exec函數、popen函數,passthru,shell_exec函數他們都可以執行系統命令,不過前提時必須系統給了權限了哦。 syste

程序員專屬奢侈品,你

spa center nbsp bsp 裝逼 雙飛燕 耳機 代碼 江蘇 現在,放松放松 讓我們一起看看屬於程序員的奢侈品 (看完了就更“開心”了) 好,不說廢話了 咱們先看幹貨(總有一個你買不起的~) 看完你一定會說 原來我代碼寫不好 是因為就差一個***啊~ No.1 完

C++11新特性應用--介紹新增的便利法(用於排序的法)

uil pretty processor nes container 升序 .text mar c++11 繼續C++11在頭文件algorithm中添加的算法。 至少我認為,在stl的算法中,用到最多的就是sort了,我們不去探索sort的源代碼。就

自從勒索病毒到來之後端口比較敏感,我來教你如何手動關閉外部連接到本地端口,防範中招!

電腦維護Windows 7與Windows 10方法一樣:控制面板---系統和安全---Windows 防火墻---高級設置---入站規則---新建規則---選擇“端口”後下一步---選擇“特定本地端口”,輸入 135,137,138,139,445 端口號,中間用英文逗號隔開即可---下一步選擇“阻止連

C#版本?C#和.net版本什麽區別?C#和.net對應版本?

3.5 vs2012 初始化 重載 中新 對象初始化 初始 擴展 windows C#1.0 1.1-->VS2003-->.NET 1.0 1.1-->委托 事件 屬性 AttributeC#2.0-->VS2005-->.NET 2.0--

C#根據用戶輸入字符串,輸出大寫字母,小寫字母

串接 輸出大寫字母 main void 一個 adl ring static char s static void Main(string[] args) { // 根據用戶輸入字符串,輸出大寫字母有幾個,小寫字母有幾個。 Conso

這20Docker Command,是你會的?

運維 docker 容器 在這之前呢,也寫過兩篇關於Docker基礎入門類的文章 Docker容器技術入門(一) Docker容器技術入門(二) 很多人都感覺這文章這麽簡單、這麽基礎,可是別忘記了“萬丈高樓平地起”,如果少了這個平地址,你這高樓估計也起不了。所以,基礎是學習任何一門技術或者一個技術

9大行為導致Java程序員薪資過低, 你

java 架構師 互聯網 IT 程序員 Java程序員薪水有高有低,有的人一個月可能拿30K、50K,有的人可能只有2K、3K。同樣有五年工作經驗的Java程序員,可能一個人每月拿20K,一個拿5K。是什麽因素導致了這種差異?本文整理導致Java程序員薪水低的9大行為,避開這些大坑,你就離

HBASE列族不能太多的真相 (一個table列族就 Store)

gii 大小 mil 更多 觸發 flush adc 同事 就是 今天和同事聊到這個問題,發現者自己理解上有點錯誤。借此機會記錄下 HRegionServer內部管理了一系列HRegion對象,每個HRegion對 應了table中的一個region,HRegion中由多

控制能同時線程並發Semaphore

ava class exception rand 單元 當前 math pri 時有 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import ja

PAT 1040 PAT

result har ret blank return http pri lan main https://pintia.cn/problem-sets/994805260223102976/problems/994805282389999616 字符串 APPAPT

種統計一個二進制數內1的方法

是不是 aaa emp ++ iostream ace 不能 位運算 fff //幾種統計一個二進制數內有幾個1的方法//方法一: int f1(int temp) { int num = 0; while(temp) { int t =

1040 PAT (25 分)

字串 APPAPT 中包含了兩個單詞 PAT,其中第一個 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二個 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。 現給定字串,問一共可以形成多少個 PAT? 輸入格式: 輸入只有一行,包含一個字串,長度

mySql中,查詢一串字串裡'abc'

mySql中,查詢一串字串裡有幾個’abc’ 我在實習時候碰到過一個這樣的需求,在表裡有一串12位的字串,全是數字0和1,如下: 000011111111 表示這個人一年中,前四個月沒有繳費,後八個月繳費了。我的需求是想知道這個人一年總共繳費多少個月。 在寫sql語句時,有一個巧方法,利