iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >数据库之SQL技巧整理案例
  • 939
分享到

数据库之SQL技巧整理案例

2024-04-02 19:04:59 939人浏览 安东尼
摘要

一、获得给定月份的周日数 根据给定的某个日期,计算这个月份的周日的天数。 根据系统变量@@DATEFIRST的值,判断周日的序号为【DatePart(WEEKDAY,RQ)= (07

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

根据给定的某个日期,计算这个月份的周日的天数。
根据系统变量@@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技巧内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 数据库之SQL技巧整理案例

本文链接: https://www.lsjlt.com/news/129901.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库之SQL技巧整理案例
    一、获得给定月份的周日数 根据给定的某个日期,计算这个月份的周日的天数。 根据系统变量@@DATEFIRST的值,判断周日的序号为【DatePart(WEEKDAY,RQ)= (07...
    99+
    2024-04-02
  • SQL数据库的使用技巧
    本篇内容主要讲解“SQL数据库的使用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL数据库的使用技巧”吧!应该使用哪种方法创建用户?  创建用户有几种方...
    99+
    2024-04-02
  • SQL数据库的案例分析
    小编给大家分享一下SQL数据库的案例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据表PRAGMA foreign_keys =&nbs...
    99+
    2023-06-22
  • SQL数据库十四种案例介绍
    数据表 PRAGMA foreign_keys = OFF; -- ---------------------------- -- Table structure for ...
    99+
    2024-04-02
  • 数据库优化技巧:让您的数据库成为性能之王!
    一、数据库索引 索引是数据库中的一种数据结构,它可以加快数据检索速度。索引就像书中的目录一样,它可以帮助您快速找到所需的数据。 索引的类型有很多种,常见的有: B树索引:B树索引是使用最广泛的索引类型。它是一种平衡树,可以快速找到数据...
    99+
    2024-02-07
    数据库优化 索引 查询优化 事务 性能
  • 数据库之SQL注入的示例分析
    小编给大家分享一下数据库之SQL注入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、产生SQL注入原因开发代码的时候没有全面考虑到网络安全性,特别是在...
    99+
    2023-06-20
  • 利用HTML读取数据库之技巧与方法
    为了使用 html 从数据库读取数据,有几种方法:使用 ajax 调用,通过异步通信以无缝方式检索数据;使用 websockets,建立持久连接以实现实时数据传输;并且将响应格式化为 j...
    99+
    2024-04-09
    html 技巧与方法 mysql
  • Oracle数据库管理实用技巧分享
    Oracle数据库管理实用技巧分享 Oracle数据库作为业界领先的关系型数据库管理系统,在企业应用中被广泛使用。为了更高效地管理Oracle数据库,我们可以利用一些实用的技巧和方法。...
    99+
    2024-03-03
    实用技巧 管理技巧 sql优化 sql语句
  • sql数据库如何调整数据顺序
    在SQL数据库中,可以使用ORDER BY子句来调整数据的顺序。ORDER BY子句可以根据指定的列来对结果集进行排序,默认情况下,...
    99+
    2023-10-27
    sql数据库
  • C#连接SQL数据库和查询数据功能的操作技巧
    大数据时代在编程可能需要用到一些文本内容,不可能全部写到代码里,不好更改,用户也不方便使用 所以需要用到我们的数据库来保存这些数据,直接更改数据 SQL: 下载地址:https://...
    99+
    2024-04-02
  • 数据库中sql完整性约束的示例分析
    小编给大家分享一下数据库中sql完整性约束的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!完整性约束  完整性约束是为了...
    99+
    2024-04-02
  • C#连接SQL Sever数据库与数据查询实例之数据仓库详解
    目录前言1.下载后打开选择登录:Windows身份验证2.创建登录的账号和密码(右键创建)3.创建数据库表 表的右键新建即可4.导入数据 这里以 信息表为例子C#连接数据库1.创建连...
    99+
    2024-04-02
  • Oracle 数据库日志种类及管理技巧
    Oracle 数据库日志种类及管理技巧 在Oracle数据库中,日志是非常重要的组成部分,它记录了数据库操作的详细信息,以便在出现故障或意外情况时进行故障恢复和数据还原。在本文中,我们...
    99+
    2024-03-11
    数据库 oracle 日志 数据丢失
  • MySQL数据库的常用技巧
    这篇文章主要讲解了“MySQL数据库的常用技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库的常用技巧”吧! 正则表达式-- 是否...
    99+
    2024-04-02
  • oracle数据库查看锁表的sql语句整理
    目录关键表查看锁表的SIDsql1sql2查看锁表执行语句用sid查询单个查询所有加锁的sql查询未提交事务的SQL杀死锁总结 关键表 V$LOCKED_OBJECT :记录锁信息的表v$sessio...
    99+
    2023-10-26
    oracle查看锁表sql语句 oracle 锁表如何查看 oracle查找锁表语句
  • Golang函数性能优化之数据预处理技巧
    golang 函数性能优化中,数据预处理技巧至关重要,包括:缓存常用数据,避免 i/o 操作和计算。预计算派生值,节省重复计算。使用切片扩展长度,避免多次分配和复制。 Golang 函...
    99+
    2024-04-17
    golang 性能优化
  • 如何分析SQL Server数据库触发器概念、原理及案例
    如何分析SQL Server数据库触发器概念、原理及案例,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。概述触发器(trigge...
    99+
    2024-04-02
  • SQL Server数据库之备份和恢复数据库
    目录1. 概述2. 备份类型3. 恢复模式3.1 简单恢复模式3.2 完全恢复模式和大容量日志恢复模式4. 备份数据库5. 恢复数据库1. 概述 在一些对数据可靠性要求很高的行业,若发生意外停机或数据丢失,其损失是十分惨...
    99+
    2023-03-23
    数据库的备份方法 数据库的恢复方式
  • MySQL数据库技巧有哪些呢
    这篇文章将为大家详细讲解有关MySQL数据库技巧有哪些呢,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。带你了解10个MySQL数据库技巧01 MySQL中如...
    99+
    2024-04-02
  • 数据库优化技巧有哪些?
    随着网络时代的到来,数据已经成为公司、企业和个人的宝贵财产。小到个人的联系人,大到企业的客户、销售数据,都需要储存和管理。而作为数据储存和管理的重要工具,数据库发挥着不可替代的作用。但是,随着数据量的增加,数据库性能的瓶颈也随之出现,需要进...
    99+
    2023-05-14
    索引优化 查询语句优化 数据库表设计优化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作