在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、获得给定月份的周日数根据给定的某个日期,计算这个月份的周日的天数。
下面是获得周日的SQL语句,SQL语句采用了嵌套循环的方式来获取数据 DECLARE @Day SmallDateTime SET @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), RQ FROM Temp WHERE DatePart(WEEKDAY,RQ)= (07-@@DateFirst) % 7 + 1 其中: 【DateAdd(MM, DateDiff(MM,0,‘2019-08-21'), 0)】是获取当月第一天的通常做法
二、获得给定月份的所有天的日期其中: DECLARE @RQ SMALLDATETIME SET @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 下面是运行结果
三、获得子字符串列表利用递归来获得给定字符串的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); 下面是运行效果
给定一个带有分隔符的字符串,通过这个语句获得各个字段的列表。 --================================================================================================ -- pAppGetSplit '|','科目名称|身份证号|学员姓名|教练编号|教练姓名|培训次数|合计次数|负责比例' ================================================================================================ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pAppGetSplit' AND type = 'P') DROP PROCEDURE pAppGetSplit GO CREATE 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 下面是运行效果
四、获得本周指定周几的日期根据指定获得的周几,得到日期 --获得本周周一的日期 DECLARE @Z SMALLINT -- [1,2,3,4,5,6,7]分别代表[周一,周二,周三,周四,周五,周六,周日] SET @Z=1 SELECT GetDate() 今天, DATEPART(Weekday,GetDate()) 今天序号, (DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7 今天是周几, DATEADD(Day,@Z-(DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7,GetDate()) 本周周一 到此这篇关于数据库之SQL技巧整理案例的文章就介绍到这了,更多相关SQL技巧内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论