当前位置: 首页 > news >正文

SQL关于日期的计算合集

前言

在SQL Server中,时间和日期是常见的数据类型,也是数据处理中重要的一部分。SQL Server提供了许多内置函数,用于处理时间和日期数据类型。这些函数可以帮助我们执行各种常见的任务,例如从日期中提取特定的部分,计算日期之间的差异,以及将日期和时间转换为不同的格式。本文将介绍SQL Server中一些常用的时间和日期函数,以及它们的用法和示例。
在这里插入图片描述

一些常用的函数

GetDate获取当天日期

select getdate()

DateFromParts自定义一个日期

select datefromparts(2023,2,28)

DateFormat转换日期格式

SELECT DATEFORMAT(YourDateColumn, 'YYYY-MM-DD')  AS FormattedDate FROM YourTable

DateAdd函数计算日期偏移后的新日期
SQL中的DATEADD函数用于在给定的日期上添加指定的时间间隔。它的语法如下:

DATEADD(datepart, number, date)

其中,datepart参数指定要添加的时间间隔类型,例如year(年)、quarter(季度)、month(月)、day(天)、hour(小时)、minute(分钟)或second(秒)。number参数指定要添加的时间间隔数量。date参数是要进行添加操作的日期。

下面是一些DateDADD函数使用的示例:

--1. 在当前日期上添加一天:SELECT DATEADD(day, 1, GETDATE())--2. 在当前日期上添加一个月:SELECT DATEADD(month, 1, GETDATE())--3. 在当前日期上添加一小时:SELECT DATEADD(hour, 1, GETDATE())--4. 在指定的日期上添加一周:SELECT DATEADD(week, 1, '2021-01-01')

这些示例中,DATEADD函数会返回一个新的日期,该日期是在给定的日期上添加了指定的时间间隔后得到的。

DateDiff函数算时间差
在SQL中,DATEDIFF函数用于计算两个日期之间的时间间隔。它返回两个日期之间的差值,以指定的时间间隔单位为单位。

DATEDIFF函数的语法如下:

DATEDIFF(datepart, startdate, enddate)

其中,datepart参数指定要计算的时间间隔类型,例如year(年)、quarter(季度)、month(月)、day(天)、hour(小时)、minute(分钟)或second(秒)。startdate和enddate参数是要计算时间间隔的两个日期。

下面是一些示例:

  1. 计算两个日期之间的天数差:
SELECT DATEDIFF(day, '2021-01-01', '2021-02-01')
  1. 计算两个日期之间的小时差:
SELECT DATEDIFF(hour, '2021-01-01 10:00:00', '2021-01-01 12:00:00')
  1. 计算两个日期之间的月数差:
SELECT DATEDIFF(month, '2021-01-01', '2022-01-01')

这些示例中,DATEDIFF函数会返回两个日期之间的差值,以指定的时间间隔单位为单位。

取日期的周、年、月、日等信息

DATEPART函数。DATEPART函数返回一个整数,它是日期的一部分,例如日,月和年。

以下是DATEPART函数的语法:

select DATEPART ( date_part , input_date ) 

DATEPART函数有两个参数:

date_part是要提取的日期的一部分(参见下表中的有效日期部分)。

input_date是提取日期部分的日期。
因此,获取一个日期的WeekNum和WeekDay可以这样

select DATEPART ( wk ,  getdate() )  as wk
select DATEPART ( weekday ,  getdate() )  as wkd

date_part可取值:
在这里插入图片描述

在最前面加上以下语句将每周第一天设置为周一

SET DATEFIRST 1
--
select DATEPART ( wk ,  getdate() )  as wk--
select DATEPART ( weekday , getdate() )  as wkd

获取日期所属的当年的ISO标准周周序(ISO 标准周是一种将一年分为 52 或 53 周的时间计算方法,它是国际标准化组织(ISO)制定的一种时间标准。ISO 标准周的起始日期为每年的第一个周四,即该周的第一天为周四,最后一天为周三)

select DATEPART ( isowk ,  getdate() )  as iso_wk

计算本月第一天,上月第一天,去年本月第一天日期

sql中没有现成的函数实现,我们可以分别计算当前日期的天数d,然后往前移动d天,就可以算出来当前月的第一天的日期了。还一种思路,日期实际上就是数值,我们以0作为基础日期,0表示的日期1970年1月1日1时1分1秒,我们计算当前日期距离基础日期0过去了多少个月,然后在基础日期上移动相应的月份即可。
有了当前日期月份的第一天,移动一个月就得到了上个月的第一天日期,移动一年就得到了去年当月第一天的日期。

-- 本月第一天,0作为基础日期1970-01-01 00:00:00
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS '本月第一天';-- 上个月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) AS '上个月第一天';-- 上个月最后一天
SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AS '上个月最后一天';

计算本周第一天,上周第一天以及上周同期

涉及到周的计算要复杂点,如何计算当前周的第一天,如何计算当前周的前一周的第一天。
对于第一个问题,我们思考先计算当前日期是周几,比方说周三,那说明周一需要往前推2天,我们先用dateparts计算WeekDay,然后用dateadd往前推就好了。
有了本周第一天,再推一个week就出来上周第一天的日期,接着加上这周的周几就能推出上周同期的日期。

DECLARE @Today DATE = GETDATE();
--设置周一为一周的第一天
SET DATEFIRST 1
-- 计算本周第一天
DECLARE @FirstDayOfWeek DATE = DATEADD(DAY, 1 - DATEPART(WEEKDAY, @Today), @Today);-- 计算上周第一天
DECLARE @FirstDayOfLastWeek DATE = DATEADD(WEEK, -1, @FirstDayOfWeek);-- 输出结果
SELECT @FirstDayOfWeek AS '本周第一天', @FirstDayOfLastWeek AS '上周第一天';

相关文章:

SQL关于日期的计算合集

前言 在SQL Server中,时间和日期是常见的数据类型,也是数据处理中重要的一部分。SQL Server提供了许多内置函数,用于处理时间和日期数据类型。这些函数可以帮助我们执行各种常见的任务,例如从日期中提取特定的部分,计…...

shell_44.Linux使用 getopt 命令

使用 getopt 命令 getopt 命令在处理命令行选项和参数时非常方便。它能够识别命令行参数,简化解析过程 1. 命令格式 getopt 命令可以接受一系列任意形式的命令行选项和参数,并自动将其转换成适当的格式。 getopt 的命令格式如下: getopt opt…...

Linux备份Docker的mysql数据并传输到其他服务器保证数据级容灾

目录 简介什么是容灾 ?容灾的分类容灾和备份有什么连系 ? 数据级容灾备份步骤1、scp命令:用于Linux之间复制文件和目录2、编写备份数据库脚本3、crontab定时任务执行脚本4、测试 应用级容灾业务级容灾 简介 为了防止客户系统的数据丢失&…...

【vue+nestjs】qq第三方授权登录【超详细】

项目场景: 前端使用vue3ts 后端使用nestjs 1.申请appId,appKey 1.进入qq互联官网。创建应用 特别注意 1.在填写网站回调域时,需要你线上真实能访问的。不然审核不通过。我的回调地址是前端路由地址 2.如果你想本地调试,回调到你的线上地址。你可以在本…...

经典卷积神经网络 - VGG

使用块的网络 - VGG。 使用多个 3 3 3\times 3 33的要比使用少个 5 5 5\times 5 55的效果要好。 VGG全称是Visual Geometry Group,因为是由Oxford的Visual Geometry Group提出的。AlexNet问世之后,很多学者通过改进AlexNet的网络结构来提高自己的准确…...

系统集成测试(SIT)/系统测试(ST)/用户验收测试(UAT)

文章目录 单元测试集成测试系统测试用户验收测试黑盒测试白盒测试压力测试性能测试容量测试安全测试SIT和UAT的区别 单元测试 英文 unit testing,缩写 UT。测试粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。 …...

Android Gradle8.0以上多渠道写法以及针对不同渠道导入包的方式,填坑!

目录 多渠道的写法 针对多渠道引用不同的包 There was a failure while populating the build operation queue: Could not stat file E:\xxxx\xxxx\xxxx\app\src\UAT\libsUAT\xxx-provider(?)-xx.aar 最近升级了Gradle8.3之后,从Groovy 迁移到 Kotlin&#xff…...

hdlbits系列verilog解答(向量门操作)-14

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 构建一个具有两个 3 位输入的电路,用于计算两个向量的按位 OR、两个向量的逻辑 OR 以及两个向量的逆 (NOT)。将b反相输出到out_not上半部分,将a 的反相输出到out…...

工厂模式(初学)

工厂模式 1、简单工厂模式 是一种创建型设计模式,旨在通过一个工厂类(简单工厂)来封装对象的实例化过程 运算类 public class Operation { //这个是父类private double num1; //运算器中的两个值private double num2;public double getNu…...

python试题实例

背景: 在外地出差,突然接到单位电话,让自己出一些python考题供新人教育训练使用,以下是10道Python编程试题及其答案: 1.试题:请写一个Python程序,计算并输出1到100之间所有偶数的和。 答案&am…...

Java Heap Space问题解析与解决方案(InsCode AI 创作助手)

Heap Space问题是Java开发中常见的内存溢出问题之一,我们需要理解其原因和表现形式,然后通过优化代码、增加JVM内存和使用垃圾回收机制等方法来解决。 一、常见报错 java.lang.OutOfMemoryError: Java heap space二、Heap Space问题的原因 对象创建过…...

基于遥感影像的分类技术(监督/非监督和面向对象的分类技术)

遥感图像分类技术 “图像分类是将土地覆盖类别分配给像素的过程。例如,类别包括水、城市、森林、农业和草原。”前言 – 人工智能教程 什么是遥感图像分类? 遥感图像分类技术的三种主要类型是: 无监督图像分类监督图像分类基于对象的图像分析…...

插入兄弟元素 insertAfter() 方法

insertAfter() 方法在被选元素后插入 HTML 元素。 提示&#xff1a;如需在被选元素前插入 HTML 元素&#xff0c;请使用 insertBefore() 方法。 语法 $(content).insertAfter(selector)例子&#xff1a; $("<span>Hello world!</span>").insertAfter(…...

【C++项目】高并发内存池第二讲中心缓存CentralCache框架+核心实现

CentralCache 1.框架介绍2.核心功能3.核心函数实现介绍3.1SpanSpanList介绍3.2CentralCache.h3.3CentralCache.cpp3.4TreadCache申请内存函数介绍3.5慢反馈算法 1.框架介绍 回顾一下ThreadCache的设计&#xff1a; 如图所示&#xff0c;ThreadCache设计是一个哈希桶结构&…...

Git基础教程

一、Git简介 1、什么是Git&#xff1f; Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同&#…...

stm32外部时钟为12MHZ,修改代码适配

代码默认是8MHZ的&#xff0c;修改2个地方&#xff1a; 第一个地方是这个文件的这里&#xff1a; 第二个地方是找到这个函数&#xff1a; 修改第二个地方的这里&#xff1a;...

【数据结构】八大排序

目录 1. 排序的概念及其作用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2 直接插入排序 2.1.3 希尔排序&#xff08;缩小增量排序&#xff09; 2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2…...

MYSQL(事务+锁+MVCC+SQL执行流程)理解

一)事务的特性: 一致性:主要是在数据层面来说&#xff0c;不能说执行扣减库存的操作的时候用户订单数据却没有生成 原子性:主要是在操作层面来说&#xff0c;要么操作完成&#xff0c;要么操作全部回滚&#xff1b; 隔离性:是自己的事务操作自己的数据&#xff0c;不会受到到其…...

解密一致性哈希算法:实现高可用和负载均衡的秘诀

解密一致性哈希算法&#xff1a;实现高可用和负载均衡的秘诀 前言第一&#xff1a;分布式系统中的数据分布问题&#xff0c;为什么需要一致性哈希算法第二&#xff1a;一致性hash算法的原理第三&#xff1a;一致性哈希算法的优点和局限性第四&#xff1a;一致性哈希算法的安全性…...

Python脚本:让工作自动化起来

Python是一种流行的编程语言&#xff0c;以其简洁和易读性而闻名。它提供了大量的库和模块&#xff0c;使其成为自动化各种任务的绝佳选择。 本文将探讨Python脚本及其代码&#xff0c;可以帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化工…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...