一、获得给定月份的周日数

根据给定的某个日期,计算这个月份的周日的天数。
根据系统变量@@DATEFIRST的值,判断周日的序号为【DatePart(WEEKDAY,RQ)= (07-@@DateFirst) % 7 + 1】。下面列出了周日、周一…周六的公式

公式 周几
(7-@@DateFirst)%7 +1 周日
(7-@@DateFirst)%7 +2 周一
(7-@@DateFirst)%7 +3 周二
(7-@@DateFirst)%7 +4 周三
(7-@@DateFirst)%7 +5 周四
(7-@@DateFirst)%7 +6 周五
(7-@@DateFirst)%7 +7 周六

下面是获得周日的SQL语句,SQL语句采用了嵌套循环的方式来获取数据

DECLARE @Day SmallDateTimeSET @Day = DateAdd(MM, DateDiff(MM,0,'2019-11-21'), 0);WITH Temp AS(  SELECT @Day AS RQ UNION ALL    SELECT RQ+1    FROM TEMP WHERE DateDiff(Month,RQ+1,@Day) = 0)SELECT    RN = Row_Number() Over(ORDER BY RQ),    RQFROM Temp WHERE DatePart(WEEKDAY,RQ)= (07-@@DateFirst) % 7 + 1

【DateAdd(MM, DateDiff(MM,0,‘2019-08-21'), 0)】是获取当月第一天的通常做法
运行结果如下:

+---+---------------------+

|RN | RQ                  |

|---+---------------------|

| 1 | 2019-08-04 00:00:00 |

| 2 | 2019-08-11 00:00:00 |

| 3 | 2019-08-18 00:00:00 |

| 4 | 2019-08-25 00:00:00 |

+---+---------------------+

二、获得给定月份的所有天的日期

其中:
【DateDiff(Month,fDay+1,@RQ) = 0】是判断月份相等的通常做法

DECLARE @RQ SMALLDATETIMESET @RQ = '2019-09-01';;WITH  tAppDays (fDay) AS  (    SELECT @RQ AS fDay    UNION ALL    SELECT fDay + 1 FROM tAppDays WHERE DateDiff(Month,fDay+1,@RQ) = 0  )SELECT * FROM tAppDays ORDER BY fDAY

fDay

---------------------

2019-09-01 00:00:00

2019-09-02 00:00:00

2019-09-03 00:00:00

...

2019-09-23 00:00:00

2019-09-24 00:00:00

2019-09-25 00:00:00

2019-09-26 00:00:00

2019-09-27 00:00:00

2019-09-28 00:00:00

2019-09-29 00:00:00

2019-09-30 00:00:00

三、获得子字符串列表

利用递归来获得给定字符串的SPLIT方法

-- 利用递归来获得给定字符串的SPLIT方法DECLARE @CommentStr NVARCHAR(4000)='总经理室|销售部|会计部|人事部|工会|后勤部|生产计划部|动力分厂|质量检验部|运输部'DECLARE @Split     NVARCHAR(1)='|';WITH Temp AS(  SELECT 1 AS Num UNION ALL   SELECT Num + 1   FROM TEMP WHERE Num<Len(@CommentStr)   )SELECT  RN = Row_Number() Over(ORDER BY Num),  SplitStr = SUBSTRING(@CommentStr,Num,CHARINDEX(@Split,@CommentStr+@Split,Num)-Num)FROM Temp WHERE SUBSTRING(@Split+@CommentStr,Num,1) = @Split OPTION(MAXRECURSION 0);

RN  SplitStr

------------------------

 1  总经理室

 2  销售部

 3  会计部

 4  人事部

 5  工会

 6  后勤部

 7  生产计划部

 8  动力分厂

 9  质量检验部

10  运输部

------------------------

给定一个带有分隔符的字符串,通过这个语句获得各个字段的列表。

--================================================================================================--   pAppGetSplit '|','科目名称|身份证号|学员姓名|教练编号|教练姓名|培训次数|合计次数|负责比例'================================================================================================IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pAppGetSplit' AND type = 'P')   DROP PROCEDURE pAppGetSplitGOCREATE PROCEDURE pAppGetSplit  @Split             VARCHAR(1),  @STR               NVARCHAR(4000)AS  ;WITH Temp AS     -- 根据分隔符|获得字段列表  (  SELECT 1 AS Num UNION ALL     SELECT Num + 1     FROM TEMP WHERE Num<Len(@STR)   )  SELECT    RN = Row_Number() Over(ORDER BY Num),    SplitStr = SUBSTRING(@STR,Num,CHARINDEX(@Split,@STR+@Split,Num)-Num)  FROM Temp WHERE SUBSTRING(@Split+@STR,Num,1) = @Split OPTION(MAXRECURSION 0);GO

+---+---------------------+

|RN |  SplitStr           |

|----+---------------------|

| 1 |  科目名称           |

| 2 |  身份证号           |

| 3 |  学员姓名           |

| 4 |  教练编号           |

| 5 |  教练姓名           |

| 6 |  培训次数           |

| 7 |  合计次数           |

| 8 |  负责比例           |

+---+---------------------+

四、获得本周指定周几的日期

根据指定获得的周几,得到日期

--获得本周周一的日期DECLARE @Z SMALLINT-- [1,2,3,4,5,6,7]分别代表[周一,周二,周三,周四,周五,周六,周日]SET @Z=1SELECT  GetDate() 今天,  DATEPART(Weekday,GetDate()) 今天序号,  (DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7 今天是周几,  DATEADD(Day,@Z-(DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7,GetDate()) 本周周一

更多相关文章

  1. vue 基础语法及购物车小案例
  2. python起点网月票榜字体反爬案例
  3. Android系统配置数据库注释(settings.db)
  4. Android(安卓)中数据库查询方法 query() 中的 select
  5. [置顶] android orm映射框架(类似hibernate)基本使用
  6. Android:getWritableDatabase/getReadableDatabase无法调用onCre
  7. Android(安卓)SQLiteDatabase的使用
  8. android SQLite数据库基本操作示例
  9. android之sqlite数据库初级

随机推荐

  1. 如何使用visual studio 2017
  2. 最新进展|关于Python治理模式的投票
  3. IP及基本配置
  4. 为什么range不是迭代器?range到底是什么类
  5. 在excel 中添加表单控件
  6. Python对象的空间边界:独善其身与开放包容
  7. Spark Streaming 使用
  8. 做好付费预测,揭开用户转化的关键秘密
  9. Python决策权的投票结果诞生了,“指导委员
  10. 初识C语言