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 '上周第一天';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2021研电赛】基于动态无线充电技术的自动驾驶小车

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取! 参赛单位:北京交通大学 作品简介 近年来,电动汽车的发展得到了很多国家和车企的大力支持,但其仍然存在充电时间长、充电设施不齐全等问…

Java 数据结构

枚举 Java枚举是一种特殊的类,它用于定义有限个特定的值,例如一周的星期或者性别。枚举在Java中被视为数据类型,你可以使用它们来创建枚举类型的变量,然后使用那些枚举值等。 在Java中,声明枚举类型需要使用enum关键字…

迷你洗衣机哪个牌子好又实惠?小型洗衣机全自动

现在洗内衣内裤也是一件较麻烦的事情了,在清洗过程中还要用热水杀菌,还要确保洗衣液是否有冲洗干净,还要防止细菌的滋生等等,所以入手一款小型的烘洗全套的内衣洗衣机是非常有必要的,专门的内衣洗衣机可以最大程度减少…

乾坤js隔离

乾坤,作为一款微前端领域的知名框架,其建立在single-spa基础上。相较于single-spa,乾坤做了两件重要的事情,其一是加载资源,第二是进行资源隔离。而资源隔离又分为Js资源隔离和css资源隔离。 我们把Js隔离机制常常称作…

前端常用网址总结

https://blog.csdn.net/duanhy_love/article/details/110007515 在线CSS编辑 http://tool.alixixi.com/csseditor/ http://c.biancheng.net/css3/position.html https://www.runoob.com/css/css-positioning.html https://cssgrid-generator.netlify.app/ 开发常用组件网…

C#中获取代码执行时间的方法

在C#中,您可以使用System.Diagnostics.Stopwatch类来测量代码执行时间。以下是一个简单的示例: using System.Diagnostics; public static double MeasureExecutionTime(Action action) {Stopwatch stopwatch new Stopwatch();stopwatch.Start();actio…

SpringMVC(三)获取请求参数

1.1通过ServletAPI获取 SpringMVC封装的就是原生的servlet 我们进行测试如下所示: package com.rgf.controller.service;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.…

学习MAVEN

MAVEN的详细介绍和作用、意义 好的,小朋友们,我们今天来聊聊一个非常神奇的工具箱,它的名字叫做Maven! 🌟 1. **神奇的工具箱Maven**: Maven就像是一个神奇的工具箱🧰,它可以帮助大人们把他们的电脑工…

P2 B+树索引

文章目录 Task1 B树页B树页B树内部结点B树叶子结点 Task2 B树操作Task2 B树插入和搜索的单一值插入单一值搜索单一值 Task2 B树删除 Task3 叶子扫描的迭代器Task4 并行索引 Task1 B树页 B树页 实际上是每个B树页面的标题部分,包含叶子页面和内部页面共享的信息。 …

【Docker】Dockerfile常用指令

参考官方文档:https://docs.docker.com/engine/reference/builder/ Dockerfile常用指令 指令说明from基础镜像,当前镜像基于(依赖)哪个镜像maintainer镜像的维护者和邮箱run镜像构建时需要执行的命令workdir镜像的工作目录expos…

基于springboot实现基于Java的超市进销存系统项目【项目源码+论文说明】

基于springboot实现基于Java的超市进销存系统演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,超市进销存系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大&#x…

最详细STM32,cubeMX外部中断

这篇文章将详细介绍 cubeMX外部中断的配置,实现过程。 文章目录 前言一、外部中断的基础知识。二、cubeMX 配置外部中断三、自动生成的代码解析四、代码实现。总结 前言 实验开发板:STM32F103C8T6。所需软件:keil5 , cubeMX 。实…

09 创建型模式-建造者模式

1.建造者模式介绍: 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式 定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不 同的表示。 2.建造者模式要解决的问题 建造者模式可以将部件和其组装过程分开&am…

【Unity程序技巧】公共Update管理器

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Spring Boot中捕获异常错误信息并将其保存到数据库中

Spring Boot中捕获异常错误信息并将其保存到数据库中: 1.创建数据库表: 首先,您需要创建一个用于存储异常信息的数据库表。可以使用SQL脚本或者使用Hibernate实体类来创建表。以下是一个用于存储异常信息的表的示例SQL: CREATE TABLE erro…

【29】c++设计模式——>策略模式

策略模式 C中的策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的行为。策略模式通过将算法封装成独立的类,并且使它们可以互相替换,从而使得算法的变化独立于使用算法的客户端。 策略模式通…

图像语义分割 pytorch复现DeepLab v1图像分割网络详解以及pytorch复现(骨干网络基于VGG16、ResNet50、ResNet101)

图像语义分割 pytorch复现DeepLab v1图像分割网络详解以及pytorch复现(骨干网络基于VGG16、ResNet50、ResNet101) 背景介绍2、 网络结构详解2.1 LarFOV效果分析 2.2 DeepLab v1-LargeFOV 模型架构2.3 MSc(Multi-Scale,多尺度(预测…

vim 使用文档笔记

1. i:进入编辑模式 2. ESC:进入一般命令模式 3. h 或 ←:光标向左移动一个字符 4. j 或 ↓:光标向下移动一个字符 5. k 或 ↑:光标向上移动一个字符 6. l 或 →:光标向右移动一个字符 7. num&#xf…

Matlab论文插图绘制模板第122期—函数折线图(fplot)

本期分享的是函数折线图的绘制模板。​ 所谓函数折线图,就是将自定义线函数进行可视化表达​。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注同名公号【阿昆的…

【JavaEE】网络编程---TCP数据报套接字编程

一、TCP数据报套接字编程 1.1 ServerSocket API ServerSocket 是创建TCP服务端Socket的API ServerSocket 构造方法: ServerSocket 方法: 1.2 Socket API Socket 是客户端Socket,或服务端中接收到客户端建立连接(accept方法&…