SQLServer 日期函数用法

这篇具有很好参考价值的文章主要介绍了SQLServer 日期函数用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQL Server Date 函数

下面的表格列出了 SQL Server 中最重要的内建日期函数:

函数

描述

GETDATE()

返回当前日期和时间

DATEPART()

返回日期/时间的单独部分

DATEADD()

在日期中添加或减去指定的时间间隔

DATEDIFF()

返回两个日期之间的时间

CONVERT()

用不同的格式显示日期/时间

日期加减

select Dateadd(day,-10,GETDATE()) as '10天前'

SQLServer 日期函数用法

select Dateadd(day,10,GETDATE()) as '10天后'

SQLServer 日期函数用法

月加减

select Dateadd(month,-1,GETDATE()) as '1个月前'

SQLServer 日期函数用法

select Dateadd(month,1,GETDATE()) as '1个月后'

SQLServer 日期函数用法

年加减

select Dateadd(year,-1,GETDATE()) as '1年前'

SQLServer 日期函数用法

 

select Dateadd(year,1,GETDATE()) as '1年后'

SQLServer 日期函数用法

截取日期部分

select convert(date,getdate()-1,23昨天

SQLServer 日期函数用法

SQLServer 日期函数用法 

 

当日期不用精确到时分秒的时候 使用Dateadd(day,-1,Getdate()) 函数 会造成数据 差异 , 例如 2019-06-10 00:00:00 并不小于等于 Dateadd(day,-1,Getdate())

计算月时间进度

select

day(getdate()) as 本月第几天,

day(dateadd(month,datediff(month,-1,getdate()),-1)) as 本月总天数,

cast(convert(decimal(18,2),day(getdate()))/convert(decimal(18,2),day(dateadd(month,datediff(month,-1,getdate()),-1))) as decimal(18,4)) as 时间进度

查询今天是今年的第几天

select Datepart(dy,getdate()) as 今天是今年的第几天

select Datediff(day,Dateadd(yy, Datediff(yy,0,Getdate()), 0),Dateadd(yy, Datediff(yy,0,getdate())+1, 0)) as 今年天数

select Dateadd(yy, Datediff(yy,0,Getdate()), 0) as 今年第一天

select Dateadd(day,-1,Dateadd(yy, Datediff(yy,-1,getdate()), 0)) as 今年最后一天

SQL Server 生成指定日期范围内的每一天

DECLARE @S_DATE varchar(10),@E_DATE varchar(10);

SET @S_DATE='2019-05-01';

SET @E_DATE='2019-05-10';

SELECT

CONVERT (VARCHAR(10),dateadd(day,number,@S_DATE),23) AS every_day

FROM master..spt_values n

WHERE n.type = 'p' AND n.number<=datediff(day,@S_DATE,@E_DATE)

order by every_day;

SQLServer 日期函数用法

 

生成指定日期当月的每一天,截止到今天

SELECT

CONVERT (VARCHAR(10),dateadd(day,number,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)),23) AS every_day

FROM master..spt_values n

WHERE n.type = 'p' AND n.number<=datediff(day,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0),getdate())

order by every_day;

生成指定日期一整个月的每天

SELECT

CONVERT (VARCHAR(10),dateadd(day,number,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)),23) AS every_day

FROM master..spt_values n

WHERE n.type = 'p' AND n.number<=datediff(day,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0),Dateadd(month,Datediff(month,-1,Getdate()), -1))

order by every_day;

生成指定日期当年的每一天

SELECT

CONVERT (VARCHAR(10),dateadd(day,number,Dateadd(yy, Datediff(yy,0,Getdate()), 0)),23) AS every_day

FROM master..spt_values n

WHERE n.type = 'p' AND n.number<=datediff(day,Dateadd(yy, Datediff(yy,0,Getdate()), 0),getdate())

order by every_day;

--生成今年第一天到今天日期

SELECT

CONVERT (VARCHAR(10),dateadd(day,number,Dateadd(yy, Datediff(yy,0,Getdate()), 0)),23) AS every_day into #TMP_EVERYDAY

FROM master..spt_values n

WHERE n.type = 'p' AND n.number<=datediff(day,Dateadd(yy, Datediff(yy,0,Getdate()), 0),getdate()-1)

order by every_day;

select

Dateadd(dd, Datediff(dd,0,Getdate()), 0) as 今天,

Dateadd(mm, Datediff(mm,0,Getdate()), 0) as 本月第一天,

Dateadd(month,Datediff(month,-1,Getdate()), -1) as 本月最后一天,

Dateadd(mm, Datediff(mm,0,Getdate())-1, 0) as 上月第一天,

Dateadd(month,datediff(month,-1,Getdate())-1, -1) as 上月最后一天,

Dateadd(yy, Datediff(yy,0,Getdate()), 0) as 今年第一天,

Dateadd(yy, Datediff(yy,0,getdate())+1, -1) as 今年最后一天,

Dateadd(yy, Datediff(yy,0,Getdate())-1, 0) as 去年第一天,

Dateadd(yy, Datediff(yy,0,getdate()), -1) as 去年最后一天,

Day(Dateadd(month, Datediff(month,-1,Getdate()), -1)) as 本月总天数,

Day(Dateadd(month, Datediff(month,-1,Getdate())-1, -1)) as 上月总天数

查询结果

SQLServer 日期函数用法

 

1.一个月第一天的

SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

2.本周的星期一

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

3.一年的第一天

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

4.季度的第一天

SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

5.当天的开始

SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

计算原理为

在SQL Server 中

Select Dateadd(day,0,0) as 起始日期  返回的是 1900-01-01 00:00:00 000

SQLServer 日期函数用法

 

Select Datediff(Year,0,Getdate()) as '1900年到今天过去的年数'  则返回 从1900 年~今天过去的年数

SQLServer 日期函数用法

Select Dateadd(Year,Datediff(Year,0,Getdate()),0)

获取的 就是 1900-01-01 00:00:00 000  年份 +119

select DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,getdate())),0) as 本周第一天

select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) as 本月第一天

select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) as 本季第一天

select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) as 本年第一天

SQLServer 日期函数用法

select

DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,getdate())),0) as 本周第一天,

DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,getdate())),6) as 本周最后一天,

Dateadd(mm, Datediff(mm,0,Getdate()), 0) as 本月第一天,

Dateadd(month,Datediff(month,-1,Getdate()), -1) as 本月最后一天,

DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) as 本季度第一天,

Dateadd(dd,-1,DATEADD(qq, DATEDIFF(qq,0,getdate())+1, 0)) as 本季度最后一天

SQLServer 日期函数用法

注意: 获取本周第一天的时候不能使用

select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) as 本周第一天

这会导致 在周日的时候把本周第一天算到明天去

例如

select DATEADD(wk, DATEDIFF(wk,0,'2019-05-12'), 0) as 本周第一天

SQLServer 日期函数用法

 

如下图所示:

2019-05-12 的本周第一天应该是2019-05-06

而 不是 2019-05-13

SQLServer 日期函数用法

 

正确的用法应该使用

select

DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,'2019-05-12')),0) as 本周第一天,

DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,'2019-05-12')),6) as 本周最后一天

或者

select 

DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,'2019-05-12')),0as 本周第一天,

DATEADD(dd,6,DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,'2019-05-12')),0)) as 本周最后一天

SQLServer 日期函数用法

如果 一周的第一天要从周日算起则使用(错误写法,请勿使用,该写法今天为周一时会出错)

--周日作为一周第一天(往前推1天)

select

Dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,getdate())),0)) as 本周第一天,

Dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1,getdate())),6)) as 本周最后一天

SQL Server 生成指定日期之前的每个月最后一天

SELECT

Dateadd(month,datediff(month,-1,getdate())-(number+1), -1) as lastday_of_month

FROM master..spt_values n

WHERE n.type = 'p' and n.number<=11 and n.number<Month(getdate())-1

order by lastday_of_month

SQLServer 日期函数用法

--使用循环生成7天前每天日期

Declare

@S_DATE date

set @S_DATE=convert(varchar(10),getdate()-7,23)

while @S_DATE<convert(varchar(10),getdate(),23)

begin

    print @S_DATE

    set @S_DATE=DATEADD(day,1,@S_DATE)

end

SQLServer 日期函数用法

SQL Server 判断今天是星期几

select

case datepart(dw,getdate())

when 1 then '星期天 '

when 2 then '星期一 '

when 3 then '星期二 '

when 4 then '星期三 '

when 5 then '星期四 '

when 6 then '星期五 '

when 7 then '星期六 '

end

--取今年本周与去年本周

--因为今年本周周一,与去年本周周一,不一定是同一天

--为确保天数是一样的应使用以下方法

先利用

Datediff(day,DATEADD(wk,DATEDIFF(wk,0,DATEADD(dd,-1,@RQ)),0),@RQ)

求出今年本周过去的天数,

再用Dateadd( ) 往前推 Datediff(day,DATEADD(wk,DATEDIFF(wk,0,DATEADD(dd,-1,@RQ)),0),@RQ)求出来的天数

declare @RQ datetime

set @RQ='2020-03-01'

select DATEADD(wk,DATEDIFF(wk,0,DATEADD(dd,-1,@RQ)),0),@RQ

select DATEADD(dd,-(Datediff(day,DATEADD(wk,DATEDIFF(wk,0,DATEADD(dd,-1,@RQ)),0),@RQ)),Dateadd(mm,-12,@RQ)),Dateadd(mm,-12,@RQ)

--日期格式

datepart

缩写形式

含义

year

yy, yyyy

quarter

qq, q

季度

month

mm, m

dayofyear

dy, y

一年中的第几天

day

dd, d

week

wk, ww

weekday

dw

周几

hour

hh

minute

mi, n

second

ss, s

millisecond

ms

毫秒

microsecond

mcs

微秒

nanosecond

ns

纳秒

TZoffset

tz

时间区

ISO_WEEK

isowk, isoww

ISO 标准周

参考文档<DATEPART (Transact-SQL) - SQL Server | Microsoft Docs> 文章来源地址https://www.toymoban.com/news/detail-477194.html

到了这里,关于SQLServer 日期函数用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于MySQL日期函数你不知道的用法

    MySQL提供了丰富的日期和时间函数,用于处理和操作日期时间数据。本篇博文将深入介绍一些常用的MySQL日期函数,通过详细的例子带你了解这些函数的用法和实际应用。 CURDATE() 函数返回当前日期,不包含时间信息。 结果可能类似于: NOW() 函数返回当前日期和时间。 结果可

    2024年01月18日
    浏览(43)
  • SQL Server函数CONVERT–日期时间格式转换

    语法: 1.值描述 data_type(length) 规定目标数据类型(带有可选的长度)。 expression 规定需要转换的值。 style 规定日期/时间的输出格式。 2.cast()和convert()函数比较 cast一般更容易使用,convert的优点是可以格式化日期和数值; convert一般用于日期和时间类型以及小数之间转换,而

    2024年02月03日
    浏览(59)
  • SQL Server ,日期时间函数将时间日期类型的值截取为年月日

    使用 CONVERT 函数将日期时间类型的值转换为字符串类型,同时指定格式为 yyyyMMdd(例如2022年6月30日的日期字符串为\\\'20220630\\\')。 sql复制代码 在上述例子中,我们使用 GETDATE 函数获取当前的日期时间,然后使用 CONVERT 函数将其转换为格式为 yyyyMMdd 的字符串类型。 如果要将日期

    2024年02月16日
    浏览(44)
  • SQL Server日期时间加减函数–DATEDIFF、DateAdd

    1.DATEDIFF语法 2. datepart: 时间类型 datepart 缩写 年 yy, yyyy 季度 qq, q 月 mm, m 年中的日 dy, y 日 dd, d 周 wk, ww 星期 dw, w 小时 hh 分钟 mi, n 秒 ss, s 毫秒 ms 微妙 mcs 纳秒 ns 3.DATEDIFF示列 1.DATEADD语法 2. datepart: 时间类型 datepart 缩写 年 yy, yyyy 季度 qq, q 月 mm, m 年中的日 dy, y 日 dd, d 周 wk,

    2024年02月13日
    浏览(51)
  • 【实例】POSTGRE SQL如何用age函数实现两个日期之间的差值计算用法及代码示例

    【实例】POSTGRE SQL如何用age函数实现两个日期之间的差值计算用法及代码示例 工作中遇到需要计算两个日期之间的月份差值、天数差值,百度到的众多内容自己通过实践整理后,将最终的计算结果分享给大家 例: 用到的函数:age(end_date,start_date) age函数常用来计算年龄,计算

    2024年02月04日
    浏览(62)
  • SQL Server 数据表模糊查询(like 用法)以及查询函数

    在SQL Server Management Studio (SSMS) 中,进行模糊查询主要是通过使用 like 操作符来实现的。 like 操作符用于在 where 语句中搜索列中具有指定模式的数据。 我们在简单例子中来了解: % 通配符:表示任意数量的字符。 这个例子会选择 column_name 列中包含\\\"pattern\\\"这个词的所有记录,就

    2024年01月22日
    浏览(74)
  • python: 处理表格日期的常用场景和方法

    1. 提取日期 有时候我们只需要从日期中提取出年、月、日等信息,以便更好地进行数据分析和可视化。可以使用 dt 属性实现: 2. 计算时间差 在时间序列分析中,我们通常需要计算时间差,例如两个日期之间的天数、小时数等。可以使用 timedelta 实现: 3. 将日期列设为索引

    2023年04月15日
    浏览(37)
  • Windows Server 2016安装SQLServer2008R2

    安装SQL Server 2008的过程中,报错“启用windows功能NetFx3时出错”,这是由于SQL Server 2002数据库系统的运行需要依靠.NET Framework 3.5,但是windows server 2016默认是不安装.netframework3.5的,所以必须先在操作系统上安装.NET Framework 3.5。 1.下载NetFx3.cab 链接:https://pan.baidu.com/s/1YP82Ike9Niob

    2024年02月09日
    浏览(49)
  • SqlServer2019—解决SQL Server 无法连接127.0.0.1的问题

    1、打开SQL Server 2019配置管理器 2、SQL Servere 网络配置(启用 Named Pipes 和 TCP/IP)  3、修改TCP/IP协议(右键选择属性—IP地址),具体如下图所示:  4、重启SQL Server服务  

    2024年02月11日
    浏览(48)
  • SqlServer2016下载安装步骤详解 SQL Server2016的彻底删除_还能坚持的博客-CSDN博客_sqlserver2016完全卸载

    Windows 下安装sql server 2016(附安装包资源)_极光稻草人的博客-CSDN博客_sql server 2016 安装链接: 链接:https://pan.baidu.com/s/1rPG8Ya4jSbhmHvFCDzTVew  提取码:MXJ0 如果原来以及安装过sqlServer2016或其他版本的,需彻底删除,可参考: 遇到的问题: 1.polybase要求安装orcale jre 7更新 51或更

    2024年02月05日
    浏览(104)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包