sql server 日期计算汇总(含各种日期计算方法)

合集下载

SQLServer各种日期计算方法

SQLServer各种日期计算方法

SQL Server各种日期计算方法通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。

你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。

在使用本文中的例子之前,你必须注意以下的问题。

大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。

第一天(DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天。

所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一天设置为7。

假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合。

你可以通过@@DATEFIRST函数来检查第一天设置。

为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。

DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。

DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。

要了解更多的DATEDI FF和DATEADD函数以及时间间隔可以阅读微软联机帮助。

使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。

你必须从时间间隔这个方面来考虑。

比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。

理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。

一个月的第一天第一个例子,我将告诉你如何从当前日期去这个月的最后一天。

请注意:这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。

每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。

sql date运算

sql date运算

在 SQL 中,日期运算是非常常见的操作,我们可以使用各种内置函数来对日期值进行处理。

下面列举几个常用的日期运算:1. 加减天数我们可以使用 DATEADD 函数在日期上加上或减去一定的天数,语法为:DATEADD(datepart, number, date),其中 datepart 表示要添加或减去的时间单位,如day、month、year 等,number 表示要添加或减去的数量,date 表示要进行运算的日期。

例如,下面的语句表示将今天的日期加上 7 天:```SELECT DATEADD(day, 7, GETDATE())```2. 计算两个日期之间的差值我们可以使用 DATEDIFF 函数来计算两个日期之间的差值,语法为:DATEDIFF(datepart, startdate, enddate),其中 datepart 表示要计算的时间单位,如 day、month、year 等,startdate 和 enddate 分别表示要进行计算的两个日期。

例如,下面的语句计算从今天到圣诞节还有多少天:```SELECT DATEDIFF(day, GETDATE(), '2023-12-25')```3. 提取日期部分我们可以使用 DATEPART 函数来提取日期值中的某个部分,如年、月、日等,语法为:DATEPART(datepart, date),其中 datepart 表示要提取的日期部分,date 表示要进行提取的日期。

例如,下面的语句表示提取今天的月份:```SELECT DATEPART(month, GETDATE())```4. 转换日期格式我们可以使用 CONVERT 函数来将日期值转换成指定的格式,语法为:CONVERT(datatype, expression, style),其中 datatype 表示要转换成的数据类型,expression 表示要进行转换的表达式,style 表示要转换成的格式。

sql server 日期计算汇总(含各种日期计算方法)

sql server 日期计算汇总(含各种日期计算方法)
--当前月第一天减去一个月
SELECT DATEADD(MONTH,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS 上月第一天
--简化
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS 上月第一天
--计算给定日期所在月的下月最后一天
DECLARE @Date DATETIME
SET @Date=GETDATE()
--当前月第一天加2个月再减去1天
SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0))) AS 下月最后一天
--上面两种算法精确到天 时分秒均为00:00:00.000
--下面算法课以保留时分秒
--思路:用给定日期减去月第一天与给定日期差的天数
SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)
GO
--月末,计算给定日期所在月的最后一天
DECLARE @Date DATETIME
--这也是月末算法采用下月第一天减1天计算的原因
--但是如果计算月是31天择无此问题
--例如 SELECT DATEADD(MONTH,1,2010-05-31) --结果是2010-06-30
--因此下面算法是正确的,-1 表示1899-12-31 00:00:00.000-- SELECT CONVERT(DATETIME,-1)
SELECT DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 上个星期第一天,星期日

SQL--Server--常用公式与函数整理

SQL--Server--常用公式与函数整理

SQL--Server常用公式与函数整理一、算术运算符SQL*Server*支持基本的算术运算符,如加(+)、减(-)、乘()、除(/)和取余(%)等。

这些运算符可以直接在*SQL*查询中使用,用于数字和日期类型的数据计算。

示例:sqlSELECT*5+3AS加法结果;--输出结果为8SELECT*10-5AS减法结果;--输出结果为5SELECT*32AS乘法结果;--输出结果为6SELECT*10/2AS除法结果;--输出结果为5SELECT*11%2AS取余结果;--输出结果为1二、字符串函数字符串函数主要用于字符串的处理和操作,包括截取、连接、查找、替换、转换等。

常用的字符串函数有:*LEN(string_expression):返回字符串的长度。

*LEFT(string_expression,*number_of_chars):返回字符串最左侧的指定数量的字符。

*RIGHT(string_expression,*number_of_chars):返回字符串最右侧的指定数量的字符。

*SUBSTRING(string_expression,*start,*length):返回字符串的子字符串。

*CHARINDEX(substring,*expression*[,*start_location]):返回子字符串在表达式中的起始位置。

REPLACE(string_expression,*search_string,*replacement_string):在字符串中替换指定的子字符串。

*LOWER(string_expression):将字符串转换为小写。

*UPPER(string_expression):将字符串转换为大写。

示例:sqlSELECT*LEN('Hello*World')*AS*字符串长度;*--*输出结果为*11SELECT*LEFT('Hello*World',*5)*AS*左侧子串;*--*输出结果为*Hello三、日期函数日期函数用于日期和时间的处理和计算,常用的日期函数有:*GETDATE():返回当前日期和时间。

sqlserver sql 间隔

sqlserver sql 间隔

sqlserver sql 间隔在SQL Server中,间隔通常用于计算日期和时间之间的差异,或者对数据进行分组和聚合。

以下是关于SQL Server中间隔的一些常见用法和示例:1. 计算日期间的间隔:若要计算两个日期之间的天数间隔,可以使用DATEDIFF函数,例如:SELECT DATEDIFF(day, '2022-01-01', '2022-01-31') AS DayDiff;这将返回31天,表示从2022年1月1日到2022年1月31日的间隔为31天。

2. 计算时间间的间隔:若要计算两个时间之间的小时间隔,可以使用DATEDIFF函数,例如:SELECT DATEDIFF(hour, '12:00:00', '15:00:00') AS HourDiff;这将返回3小时,表示从12:00:00到15:00:00的间隔为3小时。

3. 计算日期时间间的间隔:若要计算两个日期时间之间的间隔,可以使用DATEDIFF函数,例如:SELECT DATEDIFF(minute, '2022-01-01 12:00:00','2022-01-01 12:30:00') AS MinuteDiff;这将返回30分钟,表示从2022年1月1日12:00:00到2022年1月1日12:30:00的间隔为30分钟。

4. 使用间隔进行数据分组和聚合:间隔还可以用于对数据进行分组和聚合。

例如,可以使用DATEPART函数和DATEADD函数来按照一定的间隔对日期进行分组,并对每个间隔内的数据进行聚合操作。

总之,在SQL Server中,间隔可以用于计算日期和时间之间的差异,进行数据分组和聚合等操作。

以上是一些常见的使用方式和示例,希望对你有所帮助。

sqlserver中的时间和日期数据类型

sqlserver中的时间和日期数据类型
用来获取系统日期和时间值的函数
所有系统日期和时间值均得自运行SQL Server实例的计算机的操作系统.
精度较高的系统日期和时间函数
SQL Server 2008使用GetSystemTimeAsFileTime()Windows API来获取日期和时间值.精确程度取决于运行SQL Server实例的计算机硬件和Windows版本.此API的精度固定为100纳秒.可通过使用GetSystemTimeAdjustment()Windows API来确定该精确度.
0001-01-01 00:00:00.0000000到9999-12-31 23:59:59.9999999(以UTC时间表示)
100纳秒
8到10


注意:Transact-SQLrowversion数据类型不是日期或时间数据类型.timestamp是rowversion的同义词,但不推荐使用.
日期和时间函数
具有datetime参数的小数精度的datetimeoffset
具有确定性
用来设置或获取会话格式的函数
函数
语法
返回值
返回数据类型
确定性
@@DATEFIRST
@@DATEFIRST
返回对会话进行SET DATEFIRST操作所得结果的当前值.
tinyint
不具有确定性
SET DATEFIRST
SET DATEFIRST {number|@number_var}
返回有关所有支持语言日期格式的信息.sp_helplanguage不是日期或时间存储过程.但是,语言设置会影响日期函数的输出.
不适用
不适用
用来验证日期和时间值的函数
函数
语法
返回值

sql时间统计语句和实例

sql时间统计语句和实例

sql时间统计语句和实例标题:SQL时间统计语句和实例1. 统计某个表中每个日期的数据量```sqlSELECT DATE(date_column) AS date, COUNT(*) AS countFROM tableGROUP BY DATE(date_column)ORDER BY DATE(date_column);```这条语句可以统计某个表中每个日期的数据量,并按日期进行排序,以便更好地观察数据的分布情况。

2. 统计某个时间段内每天的数据量```sqlSELECT DATE(date_column) AS date, COUNT(*) AS countFROM tableWHERE date_column BETWEEN '2022-01-01' AND '2022-01-31' GROUP BY DATE(date_column)ORDER BY DATE(date_column);```这条语句可以统计某个时间段内每天的数据量,并按日期进行排序,以便更好地了解数据的变化趋势。

3. 统计某个时间段内每小时的数据量```sqlSELECT DATE_FORMAT(date_column, '%Y-%m-%d %H:00:00') AS hour, COUNT(*) AS countFROM tableWHERE date_column BETWEEN '2022-01-01' AND '2022-01-31' GROUP BY hourORDER BY hour;```这条语句可以统计某个时间段内每小时的数据量,并按小时进行排序,以便更好地观察数据的小时变化情况。

4. 统计某个时间段内每周的数据量```sqlSELECT YEARWEEK(date_column) AS week, COUNT(*) AS count FROM tableWHERE date_column BETWEEN '2022-01-01' AND '2022-12-31' GROUP BY weekORDER BY week;```这条语句可以统计某个时间段内每周的数据量,并按周进行排序,以便更好地了解数据的周变化趋势。

sql 日期的计算方法

sql 日期的计算方法
SELECT CONVERT(char(5),@dt,120)+'1-1'
--B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+'12-31'
--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECT CONVERT(datetime,
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)
+CASE WHEN DATEPART(Quarter,@dt) in(1,4)
THEN '31'ELSE '30' END)
--C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
CONVERT(char(8),
DATEADD(Month,
--B. 星期一做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
--4.指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)
--5.指定日期所在周的任意星期几
--A. 星期天做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)

sqlserver函数大全

sqlserver函数大全

在SQL Server在线图书或者在线帮助系统中,函数的可选参数用方括号表示。

在下列的CONVERT()函数例子中,数据类型的length和style参数是可选的: CONVERT (data-type [(length)], expression[,style])可将它简化为如下形式,因为现在不讨论如何使用数据类型:CONVERT(date_type, expression[,style])根据上面的定义,CONVERT()函数可接受2个或3个参数。

因此,下列两个例子都是正确的:SELECT CONVERT(Varchar(20),GETDATE())SELECT CONVERT(Varchar(20),GETDATE(), 101)这个函数的第一个参数是数据类型Varchar(20),第2个参数是另一个函数GETDATE()。

GETDATE()函数用datetime数据类型将返回当前的系统日期和时间。

第2条语句中的第3个参数决定了日期的样式。

这个例子中的101指以mm/dd/yyyy格式返回日期。

本章后面将详细介绍GETDATE()函数。

即使函数不带参数或者不需要参数,调用这个函数时也需要写上一对括号,例如GETDATE()函数。

注意在书中使用函数名引用函数时,一定要包含括号,因为这是一种标准形式。

确定性函数由于数据库引擎的内部工作机制,SQL Server必须根据所谓的确定性,将函数分成两个不同的组。

这不是一种新时代的信仰,只和能否根据其输入参数或执行对函数输出结果进行预测有关。

如果函数的输出只与输入参数的值相关,而与其他外部因素无关,这个函数就是确定性函数。

如果函数的输出基于环境条件,或者产生随机或者依赖结果的算法,这个函数就是非确定性的。

例如,GETDATE()函数是非确定性函数,因为它不会两次返回相同的值。

为什么要把看起来简单的事弄得如此复杂呢?主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使用(如用户自定义函数)。

SQL中的日期计算

SQL中的日期计算

SQL中的⽇期计算这两天写⼀个和统计数据有关的存储过程,⾥⾯要利⽤⽇期进⾏⼀些计算和判断,也⾃然要利⽤SQL的⼀些⽇期相关的函数。

这⾥略记⼀下,当是复习⼀下SQL。

利⽤SQL脚本内置的⼏个函数,我们能灵活的对⽇期进⾏计算和⽐较。

常⽤的⼏个函数:GETDATE(),DATEDIFF(),DATEADD()GETDATE() 当然顾名思义,得到当前的⽇期,返回类型是DateTime类型。

DATEDIFF ( datepart , startdate , enddate ) ⽤于判断在两个⽇期之间存在的指定时间间隔的数⽬。

第⼀个参数是指定时间间隔的类型,例如mm(⽉),dd(天),yy(年),ms(毫秒),ss(秒),不同的间隔类型,返回的结果也不⼀样。

DATEADD (datepart , number, date ) ⽤于⽇期运算的函数,将传⼊的⽇期,加上指定时间间隔数⽬的⽇期。

例如,计算得到本年的第⼀天:Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)我们来分析下这个SQL语句就可以知道,⾸先从最⾥⾯的getdate()开始,getdate()得到当前⽇期和时间,外层的datediff,计算当前⽇期和1900-01-01 00:00:00之间的时间间隔,返回单位是以年来统计的,如果我们分开看DATEDIFF(yy,0,getdate()),0)的结果,返回就是:109。

返回的109,传递给最外层的DATEADD函数,将1900-01-01 00:00:00加上109年,得到的结果,⾃然就是2009-01-01 00:00:00了,也即本年的第⼀天。

同样,灵活的利⽤这⼏个函数的组合,我们可以得到不同的结果:得到当⽉的第⼀天:Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)得到当前季度的第⼀天:Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)得到当天的起始时间: Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)得到上个⽉最后⼀天: Select DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))得到上个⽉的第⼀天: Select DATEADD(m,-1,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))其原理就是得到当⽉第⼀天,再减去三毫秒(SQL的时间以3毫秒为⼀个单位),这样以当前为2⽉,得到的结果就是:2009-01-3123:59:59.997得到去年的最后⼀天: Select DATEADD(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))得到本⽉的最后⼀天: Select DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))得到本年的最后⼀天: Select DATEADD(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))得到本⽉的第⼀个星期⼀: Select DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd,6-datepart(day,getdate()),getdate())), 0)。

sqlserver 的时间方法

sqlserver 的时间方法

sqlserver 的时间方法SQL Server 中有许多用于处理时间的方法和函数。

以下是一些常用的时间方法:1. GETDATE() 函数,返回当前的系统日期和时间。

例如,SELECT GETDATE();2. DATEADD() 函数,用于对日期进行加减操作。

例如,DATEADD(day, 7, GETDATE()) 返回当前日期加上7天的日期。

3. DATEDIFF() 函数,用于计算两个日期之间的时间间隔。

例如,DATEDIFF(day, '2022-01-01', '2022-01-10') 返回两个日期之间相差的天数。

4. DATEPART() 函数,用于从日期中提取特定的部分,如年、月、日等。

例如,DATEPART(year, '2022-01-01') 返回日期的年份部分。

5. CONVERT() 函数,用于将一个数据类型转换为另一个数据类型,也可以用于日期格式的转换。

例如,CONVERT(varchar,GETDATE(), 120) 返回将日期转换为指定格式的字符串。

6. FORMAT() 函数,用于将日期和时间数据格式化为指定的格式。

例如,FORMAT(GETDATE(), 'yyyy-MM-dd') 返回指定格式的日期字符串。

7. DATEFROMPARTS() 函数,用于根据指定的年、月和日构造一个日期。

例如,DATEFROMPARTS(2022, 1, 1) 返回一个指定年月日的日期。

这些方法和函数可以帮助你在 SQL Server 中对日期和时间进行灵活的处理和操作。

无论是获取当前时间、进行日期加减运算、计算时间间隔,还是格式化日期,SQL Server 都提供了丰富的方法来满足你的需求。

希望这些信息能够帮助到你。

sqlserver中daysafter()方法

sqlserver中daysafter()方法

sqlserver中daysafter()方法DAYS AFTER() 方法是 SQL Server 中一种日期函数,用于计算某个日期之后的若干天的日期。

和其他日期函数类似,该函数也需要一个参数,即要进行计算的日期。

语法DAYS AFTER(date, integer)参数:- date:要计算的日期,可以是日期型或日期时间型数据。

- integer:表示要添加的天数,可以是整数或者隐式或显式转换的数字表达式。

返回值该函数返回一个日期型数据,在给定日期后添加指定天数后的日期。

示例使用DAYS AFTER()函数可以很容易地计算出从指定日期开始的若干天后的日期。

例如,在下面的SQL查询中,将会计算10天后的日期:SELECT DAYS AFTER('2022-12-21', 10)执行该查询后,将获得如下结果:2022-12-31上述查询中,首先指定了日期“2022-12-21”,然后指定了要添加的天数“10”。

最后,该函数返回了该日期10天后的日期“2022-12-31”。

SELECT OrderDate, DAYS AFTER(OrderDate, 10) AS NewOrderDate FROM OrdersOrderDate NewOrderDate2023-01-04 2023-01-142023-01-08 2023-01-182023-01-18 2023-01-282023-01-25 2023-02-04上述查询中,查询了所有订单的订单日期,并使用DAYS AFTER()函数计算了10天后的新订单日期,用于在查询结果集中显示。

总结。

sqlserver datediff 函数用法 csdn -回复

sqlserver datediff 函数用法 csdn -回复

sqlserver datediff 函数用法csdn -回复Datediff 函数是SQL Server 中一个非常有用的日期函数,它可以用来计算两个日期之间的差值,并返回指定的时间间隔单位。

本文将一步一步详细介绍Datediff 函数的用法和示例。

一、Datediff 函数的语法和参数在SQL Server 中,Datediff 函数的语法如下所示:DATEDIFF ( datepart, startdate, enddate )其中,datepart 是用来指定日期间隔单位的参数,可以是以下常用的单位:- year:年- quarter:季度- month:月- dayofyear:一年中的第几天- day:日- week:周- hour:小时- minute:分钟- second:秒- millisecond:毫秒- microsecond:微秒- nanosecond:纳秒startdate 和enddate 则是要计算的两个日期参数。

二、基本用法示例下面我们通过几个简单的示例来演示Datediff 函数的基本用法:1. 计算两个日期之间的天数差假设我们要计算某个事件发生后的天数差,可以使用如下的SQL 语句:sqlSELECT DATEDIFF(day, '2022-01-01', '2022-01-10')上述SQL 查询将返回9,表示从2022 年1 月1 日至2022 年1 月10 日共有9 天。

2. 计算两个日期之间的小时差如果我们需要计算某个任务完成所需的小时数,可以使用如下的SQL 语句:sqlSELECT DATEDIFF(hour, '2022-01-01 12:00', '2022-01-02 10:30') 上述SQL 查询将返回22,表示从2022 年1 月1 日12:00 至2022 年1 月2 日10:30 共需22 小时。

SQLSERVER常用日期转换函数

SQLSERVER常用日期转换函数

SQLSERVER常⽤⽇期转换函数常⽤⽇期转换常⽤⽇期函数1. CONVERT⽇期格式轉換(年⽉⽇时分秒毫秒):SELECT CONVERT(VARCHAR(100), GETDATE(), 120); --【120】2011-03-15 10:55:57(yyyy-MM-dd HH:mm:ss)SELECT CONVERT(VARCHAR(100), GETDATE(), 23); --【23】2020-09-29,【102】2020.09.29,【111】2020/09/29,【112】20200929 SELECT CONVERT(VARCHAR(100), GETDATE(), 24); --【24】11:46:53SELECT DATEDIFF(DAY, '2020-01-01', '2020-02-02') AS'間隔時間(天數)'; --31 获取两个⽇期之间的间隔(天數)SELECT GETDATE() AS'东⼋区时间', GETUTCDATE() AS'UTC时间'; --获取UTC时间(UTC時間⽐東⼋區時間早8⼩時)2. FORMAT⽇期格式轉換(年⽉⽇时分秒毫秒):DECLARE@DATE DATETIME=GETDATE();SELECT FORMAT(@DATE, 'D', 'EN-US') AS'US ENGLISH RESULT',FORMAT(@DATE, 'D', 'ZH-CN') AS'SIMPLIFIED CHINESE (PRC) RESULT',FORMAT(@DATE, 'yyyy-MM-dd') AS当前⽇期, --注意yyyy-MM-dd⼤⼩写FORMAT(@DATE, 'yyyy-MM-dd HH:mm:ss') AS当前时间, --注意MM或者dd单双的区别FORMAT(@DATE, 'yyyy-MM-dd HH:mm:ss.fff') AS当前时间,FORMAT(@DATE, 'yyyyMMddHHmmss') AS当前时间,FORMAT(@DATE, 'yyyyMMddHHmmssfff') AS当前时间,FORMAT(@DATE, 'yyyy年MM⽉dd⽇ HH时mm分ss秒') AS中⽂时间;3. 截取⽇期--截取⽇期:截取年、截取⽉、截取⽇、截取⼩时、截取分钟SELECT YEAR(GETDATE()) AS YEAR,MONTH(GETDATE()) AS MONTH,DAY(GETDATE()) AS DAY; --2011 3 15SELECT DATEPART(YEAR, GETDATE()) AS YEAR, -- 年 2018DATEPART(MONTH, GETDATE()) AS MONTH, -- ⽉ 12DATEPART(DAY, GETDATE()) AS DAY, -- ⽇ 1DATEPART(HOUR, GETDATE()) AS HOUR, -- 时 21DATEPART(MINUTE, GETDATE()) AS MINUTE, -- 分 02DATEPART(SECOND, GETDATE()) AS SECOND; -- 秒 33SELECT DATEFROMPARTS(2020, 12, 20) AS DATEVALUE; --2020-12-204. 周相关⽇期SELECT DATEADD(WK, DATEDIFF(WK, 0, GETDATE()), 0) AS星期⼀;--获取本周周⼀的⽇期SELECT DATEADD(WK, DATEDIFF(WK, 0, GETDATE()), 1) AS星期⼆;--获取本周周⼆的⽇期SELECT DATEADD(WK, DATEDIFF(WK, 0, GETDATE()), 6) AS星期⽇;--获取本周周⽇的⽇期5. 本相关⽇期--本⽉第⼀天、最后⼀天、下个⽉最后⼀天 EOMONTH 语法SELECT EOMONTH(GETDATE(), -1) AS'上⼀⽉最后⼀天',DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)) AS'本⽉第⼀天',EOMONTH(GETDATE(), 0) AS'本⽉最后⼀天',EOMONTH(GETDATE(), 1) AS'下⼀⽉最后⼀天',EOMONTH(GETDATE(), 2) AS'下两⽉最后⼀天';--本⽉第⼀天SELECT DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0)SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) +'01')SELECT CONVERT(VARCHAR(7), GETDATE(), 120) +'-01'; --2011-04-01--本⽉最后⼀天SELECT DATEADD(MS, -3, DATEADD(MM, DATEDIFF(M, 0, GETDATE()) +1, 0));SELECT DATEADD(DAY, -1, CONVERT(CHAR(6), DATEADD(MONTH, 1, GETDATE()), 112) +'01');SELECT CONVERT(VARCHAR(10), DATEADD(DAY, -1, CONVERT(CHAR(7), DATEADD(MONTH, 1, GETDATE()), 120) +'-01'), 120); --2011-04-30 --上⽉的最后⼀天SELECT DATEADD(MS, -3, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0));--本⽉的第⼀个星期⼀SELECT DATEADD (WK , DATEDIFF ( WK ,0 , DATEADD( DD , 6-DATEPART(DAY ,GETDATE ()), GETDATE()) ), 0)6. 季/年相关⽇期--季度第⼀天和最后⼀天SELECT DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()), 0);--获得当前是第⼏季度SELECT DATEPART (QUARTER ,GETDATE())--年第⼀天和最后⼀天SELECT DATEADD(YY, DATEDIFF(YY, 0, GETDATE()), 0);SELECT CONVERT (DATETIME ,CONVERT( CHAR( 4 ),GETDATE (), 120)+'0101' ) SELECT CONVERT (DATETIME ,CONVERT( CHAR( 4 ),GETDATE (), 120)+'1231' ) SELECT DATEADD(MS, -3, DATEADD(YY, DATEDIFF(YY, 0, GETDATE()) +1, 0)); --去年的最后⼀天SELECT DATEADD(MS, -3, DATEADD(YY, DATEDIFF(YY, 0, GETDATE()), 0));。

SqlServer、Oracle、MySQL日期格式化函数处理

SqlServer、Oracle、MySQL日期格式化函数处理

SqlServer、Oracle、MySQL⽇期格式化函数处理⽬录Sql ServerCONVERT ( '取数长度' , '时间' , '类型')查询对应时间: 2021-03-17T19:18:18.007Select CONVERT(varchar(100), GETDATE(), 0) -- 03 17 2021 7:18PMSelect CONVERT(varchar(100), GETDATE(), 1) -- 03/17/21Select CONVERT(varchar(100), GETDATE(), 2) -- 21.03.17Select CONVERT(varchar(100), GETDATE(), 3) -- 2017-3-21Select CONVERT(varchar(100), GETDATE(), 4) -- 17.03.21Select CONVERT(varchar(100), GETDATE(), 5) -- 2017-3-21Select CONVERT(varchar(100), GETDATE(), 6) -- 17 03 21Select CONVERT(varchar(100), GETDATE(), 7) -- 03 17, 21Select CONVERT(varchar(100), GETDATE(), 8) -- 19:18:18Select CONVERT(varchar(100), GETDATE(), 9) -- 03 17 2021 7:18:18:007PMSelect CONVERT(varchar(100), GETDATE(), 10) -- 03-17-21Select CONVERT(varchar(100), GETDATE(), 11) -- 2021-3-17Select CONVERT(varchar(100), GETDATE(), 12) -- 210317Select CONVERT(varchar(100), GETDATE(), 13) -- 17 03 2021 19:18:18:007Select CONVERT(varchar(100), GETDATE(), 14) -- 19:18:18:007Select CONVERT(varchar(100), GETDATE(), 20) -- 2021-3-17 19:18Select CONVERT(varchar(100), GETDATE(), 21) -- 18:18.0Select CONVERT(varchar(100), GETDATE(), 22) -- 03/17/21 7:18:18 PMSelect CONVERT(varchar(100), GETDATE(), 23) -- 2021-3-17Select CONVERT(varchar(100), GETDATE(), 24) -- 19:18:18Select CONVERT(varchar(100), GETDATE(), 25) -- 18:18.0Select CONVERT(varchar(100), GETDATE(), 100) -- 03 17 2021 7:18PMSelect CONVERT(varchar(100), GETDATE(), 101) -- 03/17/2021Select CONVERT(varchar(100), GETDATE(), 102) -- 2021.03.17Select CONVERT(varchar(100), GETDATE(), 103) -- 17/03/2021Select CONVERT(varchar(100), GETDATE(), 104) -- 17.03.2021Select CONVERT(varchar(100), GETDATE(), 105) -- 17-03-2021Select CONVERT(varchar(100), GETDATE(), 106) -- 17 03 2021Select CONVERT(varchar(100), GETDATE(), 107) -- 03 17, 2021Select CONVERT(varchar(100), GETDATE(), 108) -- 19:18:18Select CONVERT(varchar(100), GETDATE(), 109) -- 03 17 2021 7:18:18:007PMSelect CONVERT(varchar(100), GETDATE(), 110) -- 03-17-2021Select CONVERT(varchar(100), GETDATE(), 111) -- 2021-3-17Select CONVERT(varchar(100), GETDATE(), 112) -- 20210317Select CONVERT(varchar(100), GETDATE(), 113) -- 17 03 2021 19:18:18:007Select CONVERT(varchar(100), GETDATE(), 114) -- 19:18:18:007Select CONVERT(varchar(100), GETDATE(), 120) -- 2021-3-17 19:18Select CONVERT(varchar(100), GETDATE(), 121) -- 18:18.0Select CONVERT(varchar(100), GETDATE(), 126) -- 2021-03-17T19:18:18.007Select CONVERT(varchar(100), GETDATE(), 130) -- 4 1442 7:18:18:007PMSelect CONVERT(varchar(100), GETDATE(), 131) -- 4/08/1442 7:18:18:007PMOracle-- 字符串转时间类型SELECT to_date(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM dual;-- 时间转指定格式字符串SELECT to_char(SYSDATE,'yyyy"年"mm"⽉"dd"⽇"') FROM DUAL;-- 年季⽉⽇取值select to_char(sysdate,'yyyy') from dual; --年select to_char(sysdate,'Q' from dual; --季select to_char(sysdate,'mm') from dual; --⽉select to_char(sysdate,'dd') from dual; --⽇-- Oracle 时间SELECT SYSDATE FROM dual; -- 系统时间SELECT SYSTIMESTAMP FROM dual; -- 当前系统时间戳SELECT CURRENT_TIMESTAMP FROM dual; -- 与时区设置有关,返回的秒是系统的,返回的⽇期和时间是根据时区转换过的SELECT current_date FROM dual; -- 是对CURRENT_TIMESTAMP准确到秒的四舍五⼊select TO_DATE('19700101','yyyymmdd') + 1235728935/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24 from dual,其中1235728935就是unix/linux时间戳,转换完之后就表⽰为 2009-2-27 18:02:15。

SQLServer时间日期函数详解

SQLServer时间日期函数详解

SQLServer时间日期函数详解SQLServer,时间日期,1. 当前系统日期、时间select getdate()2. dateadd 在向指定日期加上一段时间的基础上,返回新的datetime 值例如:向日期加上2天select dateadd(day,2,''2004-10-15'') --返回:2004-10-17 00:00:00.0003. datediff 返回跨两个指定日期的日期和时间边界数。

select datediff(day,''2004-09-01'',''2004-09-18'') --返回:17select datediff(day,''2004-09-18'',''2004-09-01'') --返回:-174. datepart 返回代表指定日期的指定日期部分的整数。

SELECT DATEPART(month, ''2004-10-15'') --返回105. datename 返回代表指定日期的指定日期部分的字符串SELECT datename(weekday, ''2004-10-15'') --返回:星期五6. day(), month(),year() --可以与datepart对照一下select 当前日期=convert(varchar(10),getdate(),120),当前时间=convert(varchar(8),getdate(),114)select datename(dw,''2004-10-15'')select 本年第多少周=datename(week,''2004-10-15''),今天是周几=datename(weekday,''2004-10-15'')函数参数/功能GetDate( ) 返回系统目前的日期与时间DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值date2-date1DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称参数interval的设定值如下:值缩写(Sql Server)(Access 和ASP) 说明Year Yy yyyy 年1753 ~ 9999Quarter Qq q 季1 ~ 4Month Mm m 月1 ~ 12Day of year Dy y 一年的日数,一年中的第几日1-366Day Dd d 日,1-31Weekday Dw w 一周的日数,一周中的第几日1-7Week Wk ww 周,一年中的第几周0 ~ 51Hour Hh h 时0 ~ 23Minute Mi n 分钟0 ~ 59Second Ss s 秒0 ~ 59Millisecond Ms - 毫秒0 ~ 999access 和asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似举例:1.GetDate() 用于sql server :select GetDate()2.DateDiff(''s'',''2005-07-20'',''2005-7-25 22:56:32'')返回值为514592 秒DateDiff(''d'',''2005-07-20'',''2005-7-25 22:56:32'')返回值为5 天3.DatePart(''w'',''2005-7-25 22:56:32'')返回值为2 即星期一(周日为1,周六为7)DatePart(''d'',''2005-7-25 22:56:32'')返回值为25即25号DatePart(''y'',''2005-7-25 22:56:32'')返回值为206即这一年中第206天DatePart(''yyyy'',''2005-7-25 22:56:32'')返回值为2005即2005年具体的语法:日期函数用来操作DATETIME 和SMALLDATETIME 类型的数据,执行算术运算。

sql中 时间与数字运算

sql中 时间与数字运算

在SQL中,时间(通常表示为日期或时间戳)和数字可以进行各种运算。

以下是一些常见的例子:1. 日期和时间的算术运算:加减天数:`DATE_ADD('2023-10-23', INTERVAL 5 DAY)` 会得到`'2023-10-28'`加减月数:`DATE_ADD('2023-10-23', INTERVAL 2 MONTH)` 会得到`'2023-12-23'`加减年数:`DATE_ADD('2023-10-23', INTERVAL 1 YEAR)` 会得到`'2024-10-23'`计算两个日期之间的天数差异:`DATEDIFF('2023-10-28', '2023-10-23')` 会得到`5`2. 时间戳的算术运算:加减秒数:`TIMESTAMPADD(SQL_TSI_SECOND, 5, '2023-10-23 10:00:00')` 会得到`'2023-10-23 10:00:05'`加减分钟、小时、天等:与日期的运算类似,只是使用的单位不同。

3. 时间与数字的运算:提取日期或时间戳的某一部分(例如小时、分钟、天等):`EXTRACT(HOUR FROM '2023-10-23 15:45:30')` 会得到`15`时间与数字的加法或减法:虽然不常见,但理论上可以执行。

例如,`'2023-10-23 15:45:30' + 5` 或`5 - '2023-10-23 15:45:30'`。

结果取决于具体的数据库系统,但通常会返回一个错误或无效值。

4. 使用函数进行时间运算:计算两个日期之间的月份差异:`MONTH(DATE_SUB('2023-10-23', INTERVAL '2023-09-23' DAY))` 会得到`1`计算两个日期之间的年份差异:`YEAR(DATE_SUB('2023-10-23', INTERVAL '2021-10-23' DAY))` 会得到`2`请注意,不同的数据库系统(如MySQL、SQL Server、Oracle等)可能有细微的语法差异,因此建议查阅特定数据库的官方文档以获取准确的信息。

SQLServer日期查询-SQL查询今天、昨天、7天内、30天、今年

SQLServer日期查询-SQL查询今天、昨天、7天内、30天、今年

SQLServer⽇期查询-SQL查询今天、昨天、7天内、30天、今年SQLServer⽇期查询 - SQL查询今天、昨天、7天内、30天、今年样例:假设 SQLServer的表名——[表名] ;table[表名]中的datetime类型字段——[字段DT]-- 今天的所有数据:select*from[表名]where DateDiff(dd,[字段DT],getdate())=0select*from表名where DateDiff(dd,[字段DT],getdate())=1-- 昨天的所有数据select*from表名where DateDiff(dd,[字段DT],getdate())<=7-- 7天内的所有数据:(⼀周内⼀星期内)select*from表名where DateDiff(dd,[字段DT],getdate())<=30-- 30天内的所有数据-- 扩展select*from表名where DateDiff(mm,[字段DT],getdate())=0-- 本⽉的所有数据select*from表名where DateDiff(yy,[字段DT],getdate())=0-- 今年的所有数据今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0昨天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=17天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=730天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=30本⽉的所有数据:select * from 表名 where DateDiff(mm,datetime类型字段,getdate())=0本年的所有数据:select * from 表名 where DateDiff(yy,datetime类型字段,getdate())=0查询今天是今年的第⼏天: select datepart(dayofyear,getDate())查询今天是本⽉的第⼏天:1. select datepart(dd, getDate())2. select day(getDate())查询本周的星期⼀⽇期是多少(注意:指定⽇期不能是周⽇,如果是周⽇会计算到下周⼀去。

SQLSERVER时间格式大全

SQLSERVER时间格式大全

SQLSERVER时间格式⼤全具体的⽹址倒是没保存,可是我这个⼈习惯把好的代码记起⽅法保存下来,现在贴出来,希望原作者体谅。

复制代码代码如下:---上个⽉⽉初第⼀天select CONVERT(varchar(12) , DATEADD(mm,DATEDIFF(mm,0,dateadd(mm,-1,getdate())),0), 112 )---上个⽉⽉末最后⼀天select CONVERT(varchar(12),dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate()),0)), 112 )--1. 显⽰本⽉第⼀天SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)--2. 显⽰本⽉最后⼀天select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))--3. 上个⽉的最后⼀天SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))--4. 本⽉的第⼀个星期⼀select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)--5. 本年的第⼀天SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)--6. 本年的最后⼀天SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))--7. 去年的最后⼀天SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))--8. 本季度的第⼀天SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)--9. 本周的星期⼀SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)--10. 查询本⽉的记录select * from tableName where DATEPART(mm, theDate)=DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())--11. 查询本周的记录select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())--12 查询本季的记录注:其中:GETDATE() 是获得系统时间的函数。

sql server季度公式

sql server季度公式

sql server季度公式SQL Server 季度公式定义季度公式用于根据给定日期或日期范围确定给定日期所属的季度。

语法`QUARTER(date_expression)`其中:`date_expression` 是您要获取季度的日期或日期范围。

返回值一个介于 1 到 4 之间的值,表示年份中的季度:1:第一季度 (1 月 1 日 - 3 月 31 日)2:第二季度 (4 月 1 日 - 6 月 30 日)3:第三季度 (7 月 1 日 - 9 月 30 日)4:第四季度 (10 月 1 日 - 12 月 31 日)示例要获取 2023 年 3 月 15 日的季度,可以使用以下查询: ```SELECT QUARTER('2023-03-15')```这将返回值 `1`,表示 2023 年 3 月 15 日属于第一季度。

高级使用季度公式还可用于进行高级计算:季度范围:使用 `BETWEEN` 和 `AND` 运算符来查找给定季度范围内的日期。

例如:```SELECT FROM table_nameWHERE order_date BETWEEN '2023-01-01' AND '2023-03-31'```季度汇总:使用 `SUM()` 或 `COUNT()` 等聚合函数对季度数据进行汇总。

例如:```SELECT QUARTER(order_date), SUM(sales_amount)FROM table_nameGROUP BY QUARTER(order_date)```季度比较:使用 `CASE` 语句比较不同季度的数据。

例如: ```SELECT CASEWHEN QUARTER(order_date) = 1 THEN 'Q1'WHEN QUARTER(order_date) = 2 THEN 'Q2'WHEN QUARTER(order_date) = 3 THEN 'Q3'ELSE 'Q4'END AS quarter_name,SUM(sales_amount) AS sales_amountFROM table_nameGROUP BY quarter_name```注意事项如果 `date_expression` 为空值,则季度公式将返回 `NULL` 值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DECLARE @Date DATETIME SET @Date = GETDATE () -- 前一天,给定日期的前一天 SELECT DATEADD ( DAY , - 1 , @Date ) AS 前一天 -- 后一天,给定日期的后一天 SELECT DATEADD ( DAY , 1 , @Date ) AS 后一天 GO -- 月初,计算给定日期所在月的第一天DECLARE @Date DATETIMESET @Date=GETDATE()--前一天,给定日期的前一天SELECT DATEADD(DAY,-1,@Date) AS 前一天--后一天,给定日期的后一天SELECT DATEADD(DAY,1,@Date) AS 后一天GO--月初,计算给定日期所在月的第一天--这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用---来计算很多不同的日期。

DECLARE @Date DATETIMESET @Date=GETDATE()SELECT DATEADD(MONTH,DATEDIFF(MONTH,1900-01-01,@Date),1900-01-01) AS 所在月的第一天--精简算法,根据SQL Server的时间表示方式可知,1900-01-01 可以用0代替SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) AS 所在月的第一天--上面两种算法精确到天时分秒均为00:00:00.000--下面算法课以保留时分秒--思路:用给定日期减去月第一天与给定日期差的天数SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)GO--月末,计算给定日期所在月的最后一天DECLARE @Date DATETIMESET @Date=GETDATE()--思路:当前月的下一月1号在减1天SELECTDATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,1900-01-01,@Date),1900-01-01)) AS 所在月的最一天SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,1900-01-01,@Date),1900-01-01)-1 AS 所在月的最一天--1900-01-01 用0代替SELECT DATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS 所在月的最一天SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)-1 AS 所在月的最一天--思路:与月初计算思路相同SELECT DATEADD(MONTH,DATEDIFF(MONTH,1989-12-31,@Date),1989-12-31) AS 所在月的最一天--精简算法,1989-12-31 用-1代替SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1) AS 所在月的最一天--保留时分秒的算法SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date))) GO--其他月计算--计算给定日期所在月的上月第一天DECLARE @Date DATETIMESET @Date=GETDATE()--当前月第一天减去一个月SELECT DATEADD(MONTH,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS 上月第一天--简化SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS 上月第一天--另一种当前月第一天算法SELECT DATEADD(MONTH,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) 上月第一天GO--计算给定日期所在月的上月最后一天DECLARE @Date DATETIMESET @Date=GETDATE()--当前月第一天减去一天SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS 上月最后一天--另一种当前月第一天算法SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) 上月最后一天SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)-1 上月最后一天--另一种算法,不能用当前月的最后一天加一个月,因为当前月可能是30天。

--例如 SELECT DATEADD(MONTH,1,2010-06-30) --结果是2010-07-30而不是2010-07-31,--这也是月末算法采用下月第一天减1天计算的原因--但是如果计算月是31天择无此问题--例如 SELECT DATEADD(MONTH,1,2010-05-31) --结果是2010-06-30--因此下面算法是正确的,-1 表示1899-12-31 00:00:00.000-- SELECT CONVERT(DATETIME,-1)SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date)-1,-1)--另一种当前月算法SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) 上月最后一天--简化SELECT DATEADD(DAY,0-DATEPART(DAY,@Date),@Date) 上月最后一天GO--计算给定日期所在月的下月第一天DECLARE @Date DATETIMESET @Date=GETDATE()--当前月第一天加一个月SELECT DATEADD(MONTH,1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS 下月第一天--简化SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0) AS 下月第一天--另一种当前月第一天算法SELECT DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) 下月第一天GO--计算给定日期所在月的下月最后一天DECLARE @Date DATETIMESET @Date=GETDATE()--当前月第一天加2个月再减去1天SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0))) AS 下月最后一天--简化SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+2,0)) AS 下月最后一天SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+2,0)-1 AS 下月最后一天--另一种算法SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date)+1,-1) 下月最后一天--另一种当前月第一天算法SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date))) 下月最后一天GO--所在星期的第一天,计算给定日期所在星期的第1天(星期日为第一天)DECLARE @Date DATETIMESET @Date= GETDATE()--与SQL Server语言版本相关的算法--思路:当前日期+星期日(每周的第1天)与当前日期的差的天数--DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS 所在星期的第一天,星期日--星期日,与SQL Server语言版本或@@DATEFIRST无关--1989-12-31 是星期日,1989-12-31 再加上(当前日期与1989-12-31差的星期数)个星期SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS 所在星期的星期日--或者SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),6) AS 所在星期的星期日GO--所在星期的第二天,计算给定日期所在星期的第2天(星期日为第一天)DECLARE @Date DATETIMESET @Date= GETDATE()--思路:当前日期+星期一(每周的第2天)与当前日期的差的天数--DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS 所在星期的第二天,星期一--星期一,与SQL Server语言版本或@@DATEFIRST无关--1900-01-01 是星期一,1900-01-01 再加上(当前日期与1900-01-01差的星期数)个星期SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,@Date),0) AS 所在星期的星期一GO--上个星期第一天,计算给定日期所在星期的上一个星期日(星期日为第一天)DECLARE @Date DATETIMESET @Date= GETDATE()--思路:当前日志所在星期的星期日再减1周--DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 上个星期第一天,星期日--一周等于7天SELECT DATEADD(DAY,-7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 上个星期第一天,星期日--简化SELECT DATEADD(DAY,-6-DATEPART(WEEKDAY,@Date),@Date) AS 上个星期第一天,星期日--上个星期日,与SQL Server语言版本或@@DATEFIRST无关SELECT DATEADD(WEEK,-1+DATEDIFF(WEEK,-1,@Date),-1) AS 上个星期日--或者SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),-1) AS 上个星期日GO--下个星期第一天,计算给定日期所在星期的下一个星期日(星期日为第一天)DECLARE @Date DATETIMESET @Date= GETDATE()--思路:当前日志所在星期的星期日再加1周--DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 下个星期第一天,星期日--一周等于7天SELECT DATEADD(DAY,7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS 下个星期第一天,星期日--简化SELECT DATEADD(DAY,8-DATEPART(WEEKDAY,@Date),@Date) AS 下个星期第一天,星期日--下个星期日,与SQL Server语言版本或@@DATEFIRST无关SELECT DATEADD(WEEK,1+DATEDIFF(WEEK,-1,@Date),-1) AS 下个星期日--或者SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),6) AS 下个星期日GO--判断给定日期是星期几DECLARE @Date DATETIMESET @Date= GETDATE()--DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天) SELECT DATEPART(WEEKDAY,@Date) --返回值 1-星期日,2-星期一,3-星期二......7-星期六--上面算法与SQL 语言版本或 @@DATEFIRST 相关--下面算法与SQL Server语言版本或@@DATEFIRST无关SELECT DATENAME(WEEKDAY,@Date) 星期GO--年度计算DECLARE @Date DATETIMESET @Date=GETDATE()--年初,计算给定日期所在年的第一天SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS 所在年的第一天--年末,计算给定日期所在年的最后一天SELECT DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS 所在年的最后一天--上一年年初,计算给定日期所在年的上一年的第一天SELECT DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS 所在年的上一年的第一天--上一年年末,计算给定日期所在年的上一年的最后一天SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1) AS 所在年的上一年的最后一天--下一年年初,计算给定日期所在年的下一年的第一天SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS 所在年的下一年的第一天--下一年年末,计算给定日期所在年的下一年的最后一天SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS 所在年的下一年的最后一天GO--季度计算DECLARE @Date DATETIMESET @Date=GETDATE()--季度初,计算给定日期所在季度的第一天SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS 当前季度的第一天--季度末,计算给定日期所在季度的最后一天SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS 当前季度的最后一天--上个季度初SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS 当前季度的上个季度初--上个季度末SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS 当前季度的上个季度末--下个季度初SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS 当前季度的下个季度初--下个季度末SELECT DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS 当前季度的下个季度末GO。

相关文档
最新文档