请选择 进入手机版 | 继续访问电脑版

[MsSql] SQLServer日期函数总了案 例详解

  [复制链接]
查看242 | 回复56 | 2021-9-17 12:48:45 | 显示全部楼层 |阅读模式
目次

SQL Server发展至今,关于日期的格式的控制方法,有传统的方法,比如CONVERT(),也有比较便利的新方法,比如FORMAT();同样,关于日期的操作函数,也分为传统方法:DATEADD()等,也有便利的新方法:EOMonth()等。

一,日期的格式化

格式化是指把日期范例 (Date)、日期和时间范例 转化为字符范例 ,通常利用 CONVERT()和FORMAT()函数。

1,传统的CONVERT()

SQL Server控制日期的的表现 格式,通常利用 CONVERT()函数,通过控制style参数来控制日期表现 的格式,但是,style很多,不利于记忆。

  1. CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
复制代码

符合东方人阅读风俗 的style及其表现 格式如下:

  • 101: mm/dd/yyyy
  • 110: mm-dd-yyyy
  • 111: yyyy/mm/dd
  • 112: yyyymmdd
  • 120: yyyy-mm-dd hh:mm:ss
  • 121: yyyy-mm-dd hh:mm:sssssss

CONVERT()函数的style是数字,记忆起来比较困难,并且只能按照体系 定义的格式来表现 ,不够机动 。SQL Server提供更为机动 的转换函数FORMAT()。

2,便利的FORMAT()函数

FORMAT()函数,可以方便和机动 地控制数值、日期和时间范例 的表现 格式,通常环境 下,FORMAT()函数重要 用于格式化表现 date/time范例 和数值范例 ,参数format用于指定表现 的格式,给予用户对格式更自由地控制,culture参数是可选的,用于指定表现 的语言,该函数返回值的数据范例 是NVARCHAR,假如 格式转换失败,该函数返回NULL:

  1. FORMAT ( value, format [, culture ] )
复制代码

参数format利用 #表示一个数值,参数 format 利用 以下占位符来表示日期/时间的格式:

  • yyyy、MM、dd:表示年、月、日
  • hh:mm:ss fffffff:表示时、分、秒、毫秒
  • 利用 “/”,“-”等作为毗连 各个部分(part)的分割符号

(1)把date/time格式化

在format参数中指定日期/时间表现 的格式,以特定的格式: “yyyy:MMdd hh:mm:ss fffffff” 显式日期/时间,比方 :

  1. select format(SYSDATETIME(),'yyyy-MM-dd hh:mm:ss fffffff')
复制代码

SQLServer日期函数总了案
例详解

(2)转换数值范例

在参数format中利用 #代表一个数字,利用 相应的毗连 符,拼接成数字的格式字符,比方 :

  1. FORMAT(123456789,'###-##-####') AS 'Custom Number Result
复制代码

SQLServer日期函数总了案
例详解

二,日期和时间的布局

常用的日期的构成(datepart)是:year、month、day、hour、minute、second、ns、TZoffset(简写为 tz)

  1. DATEPART ( datepart , date )
  2. YEAR ( date )
  3. MONTH ( date )
  4. DAY ( date )
复制代码

在实际 的产品环境中,周、季度等都很有效 途:

  • quarter:季度,取值范围是 1、2、3、4
  • week:周在年中的序数,取值范围是 1 - 53
  • dayofyear:天在年中的序数,取值范围是 1 - 366
  • weekday:天在一周中的序数,取值范围是 1 - 7

DATEPART()返回的datepart是int范例 ,假如 想要返回字符范例 ,可以利用 DATENAME()函数:

  1. DATENAME ( datepart , date )
复制代码

通过datepart来构造日期,常用的函数有:

  1. DATEFROMPARTS ( year, month, day )
  2. DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision )
  3. DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision )
  4. TIMEFROMPARTS ( hour, minute, seconds, fractions, precision )
复制代码

参数precision 是指小数秒的精度,指的是DateTime2(n)、DateTimeOffset(n),Time(n)中的n值,表示以多少位小数表示1s。

三,日期操作

日期函数:EOMonth、Format、DateAdd、DateDiff、SwitchOffset

1,月份的末了 一天

函数 EOMonth() 返回指定日期的末了 一天

  1. EOMONTH ( start_date [, month_to_add ] )
复制代码

参数解释 :

  • start_date: 有两种输入方式,可以或许 转换为Date的字符串范例 和 date 数据范例
  • month_to_add: 是int 范例 ,可以或许 为正整数,负整数和0,默认值是0,假如 省略,那么利用 默认值0。

比方 ,查看当前月的末了 一天、下一个月的末了 一天、上一个月的末了 一天:

  1. declare @date date
  2. set @date=getdate()
  3. select EOMONTH(@date) as CurrentMonth_EndDay,
  4. EOMONTH(@date,1) as NextMonth_EndDay,
  5. EOMONTH(@date,-1) as LastMonth_EndDay
复制代码

2,月份的第一天

利用 DateFromParts() 函数,可以或许 从3个正整数(year,month,day)中获取date 范例 ,只必要 将day 参数设置1,就能获取月份的第一天的日期。

  1. declare @date date
  2. set @date=getdate()
  3. select DATEFROMPARTS(year(@date),month(@date),1)
复制代码

也可以利用 Format() 函数, 以字符串情势 返回月份的第一天,比方 ,获取当前月份的第一天:

  1. FORMAT(GETDATE(),'yyyyMM01')
复制代码

3,切换时区

把DateTimeOffset范例 的数据切换到指定的时区,在转换过程中,UTC时间是固定的,依据固定的UTC时间,切换到特定时区的本地时间:

  1. SWITCHOFFSET ( DATETIMEOFFSET, time_zone )
复制代码

参数解释 :

  • DATETIMEOFFSET:DateTimeOffset(n)范例 的变量
  • time_zone:指定的目的 时区数据,格式是  [+|-] hh:mm

利用 SwitchOffset()函数把DateTimeOffset的时区偏移(Offset)切换到指定的时区中,比方 ,把本地时间的时区东八区切换到东七区:

  1. DECLARE @remote DATETIMEOFFSET
  2. DECLARE @local DATETIMEOFFSET
  3. SET @local = SYSDATETIMEOFFSET()
  4. SET @remote = SWITCHOFFSET (@local, '+07:00')
  5. SELECT @remote AS remote_time,@local AS local_time
复制代码

SQLServer日期函数总了案
例详解

可以看到,东7区的时间比东8区的时间晚一个小时。

4,当前日期是周几

在SQL Server中,通过DataFirst选项设置一周的第一天,序数是从1到7,表示一周的7天。

  1. SET DATEFIRST { number | @number_var }
复制代码

(1)可以通过@@datefirst来获取设置的值

  1. set DATEFIRST 1
  2. select @@datefirst
复制代码

(2)利用 函数datepart函数获取当天是周几

  1. set DATEFIRST 1
  2. select datepart(WEEKDAY,getutcdate())
  3. set DATEFIRST 2
  4. --select @@datefirst
  5. select datepart(WEEKDAY,getutcdate())
复制代码

由于设置不同的DateFirst,会导致datepart返回不同的数值,以是 必须借助@@DateFirst

  1. set DATEFIRST 2
  2. select Datepart(weekday, getdate()+@@datefirst - 1)
  3. set DATEFIRST 1
  4. select Datepart(weekday, getdate()+@@datefirst - 1)
复制代码

4,利用 DateName获取WeekDay的名字

WeekDay的名字跟体系 的语言设置有管,跟DateFirst的设置没有关系

(1) 查看当前的语言设置

  1. select @@language
复制代码

(2) 查看体系 支持的语言

  1. select alias,name, *
  2. from sys.syslanguages
复制代码

(3) 设置语言

  1. set LANGUAGE 'Simplified Chinese'
  2. set LANGUAGE 'us_english'
复制代码

(4) 利用 DateName获取WeekDay的名字

  1. set LANGUAGE 'Simplified Chinese'
  2. select DATENAME(WEEKDAY,getutcdate())
  3. set LANGUAGE 'us_english'
  4. select DATENAME(WEEKDAY,getutcdate())
复制代码

四. 日期函数

sqlserver_时间格式化_年代 日

函数名称 参数 示例 阐明

  1. dateadd(日期部分,数字,日期)
复制代码

  1. select dateadd(year,45,'1990-12-11') 返回 2035-12-11 00:00:00.000
  2. select dateadd(month,45,'1990-12-11') 返回 1994-09-11 00:00:00.000
  3. select dateadd(mm,45,'1990-12-11') 返回 1994-09-11 00:00:00.000
  4. select dateadd(qq,12,'1990-12-11') 返回 1993-12-11 00:00:00.000
  5. select dateadd(hh,12,'1990-12-11') 返回 1990-12-11 12:00:00.000
  6. select dateadd(yy,-12,'1990-12-11') 返回 1978-12-11 00:00:00.000
复制代码

返回给指定日期加上一个时间间隔后的新的日期值。
数字:用于与指定的日期部分相加的值。假如 指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵照 四舍五入。
日期:指定的原日期
在此函数中 :dw,dy,dd 结果 一样都表示天

datediff(日期部分,开始日期,竣事 日期)

  1. select datediff(yy,'1990-12-11','2008-9-10') 返回 18
  2. selectdatediff(mm,'2007-12-11','2008-9-10') 返回 9
复制代码

返回两个指定日期的指定日期部分的差的整数值。
在此函数中dw,dy,dd 结果 一样都表示天

datename(日期部分,日期)

  1. select datename(mm,'2007-12-11') 返回 12
  2. select datename(dw,'2007-12-11') 返回星期二
  3. select datename(dd, ‘2007-12-11') 返回 11
  4. select datename(wk, ‘2007-12-11') – 50 一年中的第几个星期
  5. select datename(dy, ‘2007-12-11') – 345 一年中的第几天
  6. select DATENAME(YYYY,GETDATE()) + DATENAME(MM,GETDATE()) – 201803
复制代码

返回表示指定日期的指定日期部分的字符串。

dw 表示一星期中星期几
wk 表示一年中的第几个星期
dy 表示一年中的第几天

datepart(日期部分,日期)

  1. select datepart(mm,'2007-12-11')返回 12
  2. select datepart(dw,'2007-12-11')返回 3
  3. select datepart(dd, ‘2007-12-11')返回 11
  4. select DATEPART(YYYY,GETDATE()) + DATENAME(MM,GETDATE()) – 2021
复制代码

返回表示指定日期的指定日期部分的整数。

wk 表示一年中的第几个星期
dy 表示一年中的第几天,
dw 表示一星期中星期几,返回整数默认 1 为星期天

getdate()无参数

  1. select getdate() 返回 2222-02-22 12:34:19.070
复制代码

返回当前体系 日期和时间。

getutcdate()无参数

  1. select getutcdate() 返回2222-02-22 04:34:19.073
复制代码

返回表示当前的UTC(天下 标定时 间)时间。即格林尼治时间(GMT)

1、上月的第一天

  1. SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111)
复制代码

2、上月的末了 一天

  1. SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),111)+' 23:59:59'
复制代码

3、本月的第一天

  1. SELECT CONVERT(CHAR(10),DATEADD(dd,-DAY(GETDATE())+1,GETDATE()),111)
复制代码

4、本月的末了 一天

  1. SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)),111)+' 23:59:59'
复制代码

5、来月的末了 第一天

  1. SELECT CONVERT(CHAR(10),DATEADD(m,1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111)
复制代码

6、来月的末了 一天

  1. SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+' 23:59:59'
复制代码

日期部分  含义 :

缩写year年yy,yyyy
quarter季qq,q
month月mm, m
dayofyear天(请看函数中的阐明 )dy, y
day天(请看函数中的阐明 )dd, d
week星期wk, ww
weekday天(请看函数中的阐明 )dw, w
hour小时hh
minute分钟mi, n
second秒ss, s
millisecond毫秒ms

==================================================

Sql Server 查询指定范围(一周,一月,本周,本月等)内的数据

1.查询本日 的全部 数据

  1. select * from 表名 where datediff(day,字段名,getdate())=0
复制代码

2.查询昨日的全部 数据

  1. select * from 表名 where datediff(day,字段名,getdate()-1)=0
复制代码

3.查询当天日期在一周前的数据

  1. selcet * from 表名 where datediff(week,字段名,getdate()-1)=0
复制代码

4.查询前30天的数据

  1. select * from 表名 where datediff(d,字段名,getdate())<=30
复制代码

5.查询上一个月的数据

  1. select * from 表名 where datediff(m,字段名,getdate())<=1
复制代码

6.查询当天的数据

  1. select * from 表名 where datediff(dd,字段名,getdate())=0
复制代码

7.查询24小时内的数据

  1. select * from 表名 where datediff(hh,字段名,getdate())
复制代码

8.查询本周的数据

  1. select * from 表名 where datediff(week,字段名,getdate())=0
复制代码

9.查询本月的数据

  1. select * from 表名 where datediff(month,字段名,getdate())=0
复制代码

10.查询本季的数据

  1. select * from 表名 where datediff(qq,字段名,getdate())=0
复制代码

到此这篇关于SQLServer日期函数总了案 例详解的文章就先容 到这了,更多干系 SQLServer日期函数总结内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 宋长宁 | 2021-9-18 21:30:42 | 显示全部楼层
缺乏激情了!
回复

使用道具 举报

avatar 海田1 | 2021-9-19 08:49:36 | 显示全部楼层
有机会找admin楼主好好聊聊!
回复

使用道具 举报

avatar 梦太晚616 | 2021-9-22 15:17:47 | 显示全部楼层
admin楼主内心很强大!
回复

使用道具 举报

avatar 球死禁严 | 2021-9-24 01:26:59 | 显示全部楼层
鸟大了,什么林子都敢进啊!
回复

使用道具 举报

avatar 令狐佳人 | 2021-9-25 01:30:24 | 显示全部楼层
精神病院在通缉admin楼主!
回复

使用道具 举报

avatar weenahbp46 | 2021-9-25 13:11:40 | 显示全部楼层
我回帖admin楼主给加积分吗?
回复

使用道具 举报

avatar 尘埃416 | 2021-9-28 14:26:40 | 显示全部楼层
强,我和我的小伙伴们都惊呆了!
回复

使用道具 举报

avatar 光荣与梦想483 | 2021-9-29 10:11:07 | 显示全部楼层
很有品味!
回复

使用道具 举报

avatar 小小的鼻祖 | 2021-9-29 10:15:36 | 显示全部楼层
很多天不上线,一上线就看到这么给力的帖子!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则