目录
1.日期函数
1.1获取当前时间
可以使用GETDATE()或CURRENT_TIMESTAMP获取系统当前时间
实例:
SELECT CURRENT_TIMESTAMP as CUR_TM,GETDATE() as DT
结果:
2024-08-05 08:03:13,2024-08-05 08:03:13
1.2日期加减函数DATEADD
DATEADD() 函数在日期中添加或减去指定的时间间隔。
语法:DATEADD(datepart,number,date)
其中参数的解释如下:
- datepart: 需要添加的日期部分,如年(YEAR)、季度(QUARTER)、月(MONTH)、周(WEEK)、天(DAY)、小时(HOUR)、分钟(MINUTE)、秒(SECOND)等。
- interval: 需要添加的时间间隔,可以为正数或负数。
- datetime: 要进行加、减操作的日期。
datepart参数可以是下列缩写:
年 yy, yyyy
季度 qq, q
月 mm, m
年中的日 dy, y
日 dd, d
周 wk, ww
星期 dw, w
小时 hh
分钟 mi, n
秒 ss, s
毫秒 ms
微妙 mcs
纳秒 ns
实例:
1.年份加1
实例:
SELECT DATEADD(YEAR,1,'2024-02-03 03:09:18') as NEXT_YEAR
结果:
2025-02-03 03:09:18
2.月份减1
实例:
SELECT DATEADD(MONTH,-1,'2024-02-03 03:09:18') AS LAST_MONTH
结果:
2024-01-03 03:09:18
1.3日期差值DATEDIFF
DATEDIFF() 用于计算两个日期之间的时间间隔。它接受三个参数:时间间隔单位、开始日期和结束日期,并返回两个日期之间的单位时间间隔。(请注意,第二个日期比第一个日期早,结果将是一个负数)
语法:DATEDIFF(interval, start_date, end_date)
实例:
SELECT DATEDIFF(DAY,'2024-06-05','2024-08-05') AS DiffDate
结果:
61
1.4年月最后一天EOMONTH
实例:
SELECT EOMONTH('2023-04-19') AS LastDayOfMonth;
结果:
2023-04-30
1.5返回日期指定部分作为字符串DATENAME
用于返回日期/时间值的指定部分(如年、月、日)作为字符串
语法:DATENAME ( datepart , date )
其中:
datepart
是你想要返回的日期/时间部分。例如,year
、month
、day
等。date
是你想要从中提取日期部分的日期/时间值。
实例:
SELECT DATENAME(YEAR,'2024-09-01') as YEAR_STR
结果:返回字符类型
2024
1.6返回日期指定部分作为整形DATEPART
用于返回日期/时间值的指定部分(如年、月、日)作为整形
语法:DATEPART ( datepart , date )
实例:
SELECT DATEPART(YEAR,'2024-09-01') as YEAR_INT
结果:返回整数类型
2024
1.7判断是否为日期
1.7.1ISDATE
用于返回 1或0指明某表达式是否可以转换为日期。
语法:ISDATE(expression)
expression 参数可以是任意可被识别为日期和时间的日期表达式或字符串表达式。
实例:
SELECT ISDATE('2024-01-41'),ISDATE('2024-02-29')
结果:
0,1
1.7.8TRY_CAST
TRY_CAST 是一个SQL Server中的函数,用于尝试将一个值转换为指定的数据类型。如果转换成功,TRY_CAST会返回转换后的值;如果转换失败,则会返回NULL。这个函数在SQL Server 2012及更高版本中引入
语法:TRY_CAST ( expression AS data_type [ ( length ) ] )
expression
:要转换的值。data_type
:要将expression
转换到的数据类型。length
:指定目标数据类型的长度的可选整数。
实例:
SELECT TRY_CAST('2024-01-41' as DATE),TRY_CAST('2024-02-29' as DATE)
结果:
NULL,2024-02-29
2.特殊日期获取
2.1上月月初
实例:
SELECT DATEADD(dd,-DAY(dateadd(MONTH,-1,GETDATE()))+1,dateadd(MONTH,-1,GETDATE()))
结果:
2024-07-01 08:03:13
2.2上月月底
实例:
SELECT DATEADD(dd,-DAY(GETDATE()),GETDATE())
结果:
2024-07-31 08:03:13
2.3本月月初
实例:
SELECT DATEADD(MONTH,datediff(MONTH,0,GETDATE()),0)
结果:
2024-08-01 08:03:13
2.4本月月底
实例:
SELECT DATEADD(dd,-DAY(dateadd(MONTH,1,GETDATE())),dateadd(MONTH,1,GETDATE()))
结果:
2024-08-31 08:03:13
2.5下月月初
实例:
SELECT DATEADD(dd,-DAY(dateadd(MONTH,1,GETDATE()))+1,dateadd(MONTH,1,GETDATE()))
结果:
2024-09-01 08:03:13
2.6下月月底
实例:
SELECT DATEADD(dd,-DAY(dateadd(MONTH,2,GETDATE())),dateadd(MONTH,2,GETDATE()))
结果:
2024-09-30 08:03:13
3.日期格式转换
3.1FORMAT函数
日期函数FORMAT()可以用来格式化日期。
语法:FORMAT ( value, format [, culture ] )
value
: 要格式化的日期或时间值。format
: 指定日期或时间的输出格式的字符串。culture
: (可选)指定地区性规则的字符串。
实例:
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss') AS F_DT;
结果:
2024-08-05 08:03:13
3.2CONVERT函数
CONVERT() 函数是把日期转换为新数据类型的通用函数,CONVERT() 函数可以用不同的格式显示日期/时间数据。此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)
相互转换的时候才用到.
语法:CONVERT(data_type[(length)],expression[,style])
data_type[(length)]
表示要转换成的数据类型及其长度,expression
是要转换的表达式,style
是转换的样式代码。
实例:
SELECT CONVERT(nvarchar(50),GETDATE() ,112)
结果:
20240805
其中112表示时间格式为yyyymmdd
常见时间格式有
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
4.日期和时间数据类型
SQLServe中常见的时间类型有
日期类型 | 格式 | 范围 |
DATE | YYYY-MM-DD | 0001-01-01 到 9999-12-31 |
TIME | hh:mm:ss[.nnnnnnn] | 00:00:00.0000000 到23:59:59.9999999 |
DATETIME | YYYY-MM-DD hh:mm:ss[.nnn] | 1753-01-01 到 9999-12-31 |
DATETIME2 | YYYY-MM-DD hh:mm:ss[.nnnnnnn] | 0001-01-01 00:00:00.0000000 到9999-12-31 23:59:59.9999999 |
SMALLDATETIME | YYYY-MM-DD hh:mm | 1900-01-01 到 2079-06-06 |
可以使用CONVERT函数进行时间类型转换
实例:
SELECT CONVERT(TIME,'2024-08-01 05:30:13') as TM,CONVERT(DATE,'2024-08-01 05:30:13') as DT,CONVERT(DATETIME,'2024-08-01 05:30:13') as DTM
结果:
05:30:13,2024-08-01,2024-08-01 05:30:13