sql server发展至今,关于日期的格式的控制方法,有传统的方法,比如convert(),也有比较便利的新方法,比如format();同样,关于日期的操作函数,也分为传统方法:dateadd()等,也有便利的新方法:eomonth()等。
一,日期的格式化
格式化是指把日期类型(date)、日期和时间类型转化为字符类型,通常使用convert()和format()函数。
1,传统的convert()
sql server控制日期的的显示格式,通常使用convert()函数,通过控制style参数来控制日期显示的格式,但是,style很多,不利于记忆。
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:
format ( value, format [, culture ] )
参数format使用#表示一个数值,参数 format 使用以下占位符来表示日期/时间的格式:
- yyyy、mm、dd:表示年、月、日
- hh:mm:ss fffffff:表示时、分、秒、毫秒
- 使用“/”,“-”等作为连接各个部分(part)的分割符号
(1)把date/time格式化
在format参数中指定日期/时间显示的格式,以特定的格式: “yyyy:mmdd hh:mm:ss fffffff” 显式日期/时间,例如:
select format(sysdatetime(),'yyyy-mm-dd hh:mm:ss fffffff')
(2)转换数值类型
在参数format中使用#代表一个数字,使用相应的连接符,拼接成数字的格式字符,例如:
format(123456789,'###-##-####') as 'custom number result
二,日期和时间的结构
常用的日期的构成(datepart)是:year、month、day、hour、minute、second、ns、tzoffset(简写为 tz)
datepart ( datepart , date ) year ( date ) month ( date ) day ( date )
在实际的产品环境中,周、季度等都很有用途:
- quarter:季度,取值范围是 1、2、3、4
- week:周在年中的序数,取值范围是 1 – 53
- dayofyear:天在年中的序数,取值范围是 1 – 366
- weekday:天在一周中的序数,取值范围是 1 – 7
datepart()返回的datepart是int类型,如果想要返回字符类型,可以使用datename()函数:
datename ( datepart , date )
通过datepart来构造日期,常用的函数有:
datefromparts ( year, month, day ) datetime2fromparts ( year, month, day, hour, minute, seconds, fractions, precision ) datetimeoffsetfromparts ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision ) timefromparts ( hour, minute, seconds, fractions, precision )
参数precision 是指小数秒的精度,指的是datetime2(n)、datetimeoffset(n),time(n)中的n值,表示以多少位小数表示1s。
三,日期操作
日期函数:eomonth、format、dateadd、datediff、switchoffset
1,月份的最后一天
函数 eomonth() 返回指定日期的最后一天
eomonth ( start_date [, month_to_add ] )
参数注释:
- start_date: 有两种输入方式,能够转换为date的字符串类型 和 date 数据类型
- month_to_add: 是int 类型,能够为正整数,负整数和0,默认值是0,如果省略,那么使用默认值0。
例如,查看当前月的最后一天、下一个月的最后一天、上一个月的最后一天:
declare @date date set @date=getdate() select eomonth(@date) as currentmonth_endday, eomonth(@date,1) as nextmonth_endday, eomonth(@date,-1) as lastmonth_endday
2,月份的第一天
使用datefromparts() 函数,能够从3个正整数(year,month,day)中获取date 类型,只需要将day 参数设置1,就能获取月份的第一天的日期。
declare @date date set @date=getdate() select datefromparts(year(@date),month(@date),1)
也可以使用format() 函数, 以字符串形式返回月份的第一天,例如,获取当前月份的第一天:
format(getdate(),'yyyymm01')
3,切换时区
把datetimeoffset类型的数据切换到指定的时区,在转换过程中,utc时间是固定的,依据固定的utc时间,切换到特定时区的本地时间:
switchoffset ( datetimeoffset, time_zone )
参数注释:
- datetimeoffset:datetimeoffset(n)类型的变量
- time_zone:指定的目标时区数据,格式是 [+|-] hh:mm
使用switchoffset()函数把datetimeoffset的时区偏移(offset)切换到指定的时区中,例如,把本地时间的时区东八区切换到东七区:
declare @remote datetimeoffset declare @local datetimeoffset set @local = sysdatetimeoffset() set @remote = switchoffset (@local, '+07:00') select @remote as remote_time,@local as local_time
可以看到,东7区的时间比东8区的时间晚一个小时。
4,当前日期是周几
在sql server中,通过datafirst选项设置一周的第一天,序数是从1到7,表示一周的7天。
set datefirst { number | @number_var }
(1)可以通过@@datefirst来获取设置的值
set datefirst 1 select @@datefirst
(2)使用函数datepart函数获取当天是周几
set datefirst 1 select datepart(weekday,getutcdate()) set datefirst 2 --select @@datefirst select datepart(weekday,getutcdate())
由于设置不同的datefirst,会导致datepart返回不同的数值,所以必须借助@@datefirst
set datefirst 2 select datepart(weekday, getdate()+@@datefirst - 1) set datefirst 1 select datepart(weekday, getdate()+@@datefirst - 1)
4,使用datename获取weekday的名字
weekday的名字跟系统的语言设置有管,跟datefirst的设置没有关系
(1) 查看当前的语言设置
select @@language
(2) 查看系统支持的语言
select alias,name, * from sys.syslanguages
(3) 设置语言
set language 'simplified chinese' set language 'us_english'
(4) 使用datename获取weekday的名字
set language 'simplified chinese' select datename(weekday,getutcdate()) set language 'us_english' select datename(weekday,getutcdate())
四. 日期函数
sqlserver_时间格式化_年月日
函数名称 参数 示例 说明
dateadd(日期部分,数字,日期)
select dateadd(year,45,’1990-12-11′) 返回 2035-12-11 00:00:00.000
select dateadd(month,45,’1990-12-11′) 返回 1994-09-11 00:00:00.000
select dateadd(mm,45,’1990-12-11′) 返回 1994-09-11 00:00:00.000
select dateadd(qq,12,’1990-12-11′) 返回 1993-12-11 00:00:00.000
select dateadd(hh,12,’1990-12-11′) 返回 1990-12-11 12:00:00.000
select dateadd(yy,-12,’1990-12-11′) 返回 1978-12-11 00:00:00.000
返回给指定日期加上一个时间间隔后的新的日期值。
数字:用于与指定的日期部分相加的值。如果指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵循四舍五入。
日期:指定的原日期
在此函数中 :dw,dy,dd 效果一样都表示天
datediff(日期部分,开始日期,结束日期)
select datediff(yy,’1990-12-11′,’2008-9-10′) 返回 18
selectdatediff(mm,’2007-12-11′,’2008-9-10′) 返回 9
返回两个指定日期的指定日期部分的差的整数值。
在此函数中dw,dy,dd 效果一样都表示天
datename(日期部分,日期)
select datename(mm,'2007-12-11') 返回 12 select datename(dw,'2007-12-11') 返回星期二 select datename(dd, ‘2007-12-11') 返回 11 select datename(wk, ‘2007-12-11') – 50 一年中的第几个星期 select datename(dy, ‘2007-12-11') – 345 一年中的第几天 select datename(yyyy,getdate()) + datename(mm,getdate()) – 201803
返回表示指定日期的指定日期部分的字符串。
dw 表示一星期中星期几
wk 表示一年中的第几个星期
dy 表示一年中的第几天
datepart(日期部分,日期)
select datepart(mm,'2007-12-11')返回 12 select datepart(dw,'2007-12-11')返回 3 select datepart(dd, ‘2007-12-11')返回 11 select datepart(yyyy,getdate()) + datename(mm,getdate()) – 2021
返回表示指定日期的指定日期部分的整数。
wk 表示一年中的第几个星期
dy 表示一年中的第几天,
dw 表示一星期中星期几,返回整数默认 1 为星期天
getdate()无参数
select getdate() 返回 2222-02-22 12:34:19.070
返回当前系统日期和时间。
getutcdate()无参数
select getutcdate() 返回2222-02-22 04:34:19.073
返回表示当前的utc(世界标准时间)时间。即格林尼治时间(gmt)
1、上月的第一天
select convert(char(10),dateadd(month,-1,dateadd(dd,-day(getdate())+1,getdate())),111)
2、上月的最后一天
select convert(char(10),dateadd(ms,-3,dateadd(mm, datediff(mm,0,getdate()),0)),111)+' 23:59:59'
3、本月的第一天
select convert(char(10),dateadd(dd,-day(getdate())+1,getdate()),111)
4、本月的最后一天
select convert(char(10),dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)),111)+' 23:59:59'
5、来月的最后第一天
select convert(char(10),dateadd(m,1,dateadd(dd,-day(getdate())+1,getdate())),111)
6、来月的最后一天
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.查询今日的所有数据
select * from 表名 where datediff(day,字段名,getdate())=0
2.查询昨日的所有数据
select * from 表名 where datediff(day,字段名,getdate()-1)=0
3.查询当天日期在一周前的数据
selcet * from 表名 where datediff(week,字段名,getdate()-1)=0
4.查询前30天的数据
select * from 表名 where datediff(d,字段名,getdate())<=30
5.查询上一个月的数据
select * from 表名 where datediff(m,字段名,getdate())<=1
6.查询当天的数据
select * from 表名 where datediff(dd,字段名,getdate())=0
7.查询24小时内的数据
select * from 表名 where datediff(hh,字段名,getdate())
8.查询本周的数据
select * from 表名 where datediff(week,字段名,getdate())=0
9.查询本月的数据
select * from 表名 where datediff(month,字段名,getdate())=0
10.查询本季的数据
select * from 表名 where datediff(qq,字段名,getdate())=0
到此这篇关于sqlserver日期函数总结案例详解的文章就介绍到这了,更多相关sqlserver日期函数总结内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!