数据库sql语句大全及例题(数据库之SQL技巧整理案例)
数据库sql语句大全及例题
数据库之SQL技巧整理案例一、获得给定月份的周日数根据给定的某个日期,计算这个月份的周日的天数。
根据系统变量@@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 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)】是获取当月第一天的通常做法
运行结果如下:
二、获得给定月份的所有天的日期+---+---------------------+
|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 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
下面是运行结果
三、获得子字符串列表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 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
下面是运行效果
四、获得本周指定周几的日期+---+---------------------+
|RN | SplitStr |
|----+---------------------|
| 1 | 科目名称 |
| 2 | 身份证号 |
| 3 | 学员姓名 |
| 4 | 教练编号 |
| 5 | 教练姓名 |
| 6 | 培训次数 |
| 7 | 合计次数 |
| 8 | 负责比例 |
+---+---------------------+
根据指定获得的周几,得到日期
--获得本周周一的日期 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技巧内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- laravel数据库日志(Laravel 将数据表的数据导出,并生成seeds种子文件的方法)
- 数据库操作题(数据库日常练习题,每天进步一点点2)
- sql备份库怎么恢复(SQL恢复master数据库方法 只有mdf文件的数据库如何恢复)
- 2021-10-28 10:49:05
- sql server表字段数据类型(SQL Server数据库中伪列及伪列的含义详解)
- sqlserver备份还原数据(通过Windows批处理命令执行SQL Server数据库备份)
- idea怎样连接mysql(IDEA配置连接MYSQL数据库遇到Failed这个问题解决)
- mysql数据库如何删除重复记录(mysql数据库删除重复数据只保留一条方法实例)
- 怎么把数据库备份到阿里(阿里云数据库备份DBS与自建备份系统有什么优势?)
- 数据库sqlserver定时任务(SQL Server 2005作业设置定时任务)
- 宝塔面板使用外部数据库(宝塔面板负载状态load average中的数据代表了什么?)
- dedecms替换条件(织梦cmsDEDECMS通过正则批量查找替换数据库的自定义内容)
- sql数据库有几种数据类型(SQL的常用数据类型列表详解)
- sqlserver2019使用教程图文(SQLServer2019 数据库环境搭建与使用的实现)
- visual studio怎么连接数据库(使用Visual Studio Code连接MySql数据库并进行查询)
- mysql数据库延时监控(Mysql sql慢查询监控脚本代码实例)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
热门推荐
- yii2支持php7.2吗(Yii框架通过请求组件处理get,post请求的方法分析)
- apache服务配置详解(Apache Web服务器的完全安装指南)
- mvc编译时,让View中的错误提示
- docker 查看当前镜像(Docker 查看镜像信息的方法)
- 香港免费虚拟主机(香港虚拟主机租用要怎么选择?)
- SQL Server中@@ROWCOUNT的用法
- .Net中Immutable(不可变)集合
- mysql数据库导入错误怎么处理(MySQL数据库导入导出数据之报错解答实例讲解)
- laravel语法有哪些(对laravel in 查询的使用方法详解)
- php怎么设置curl(php curl发送请求实例方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9