SQL 常用函数整理_日期函数(一)

SQL日期函数
1、DATEADD
函数作用:按照指定的单位datepart和幅度delta修改date的值。
语法示例:dateadd(datetime date, bigint delta, string datepart)
参数说明:
date:Datetime类型,日期值。若输入为String类型会隐式转换为Datetime类型后参与运算,其它类型抛异常。
delta:Bigint类型,修改幅度。若输入为String类型或Double型会隐式转换到Bigint类型后参与运算,其他类型会引发异常。若delta大于0,则增,否则减。
datepart:String类型常量。此字段的取值遵循String与Datetime类型转换的约定,即yyyy表示年,mm表示月。
使用示例:

若trans_date = 2005-02-28 00:00:00:
dateadd(trans_date, 1, 'dd') = 2005-03-01 00:00:00
-- 加一天,结果超出当年2月份的最后一天,实际值为下个月的第一天
dateadd(trans_date, -1, 'dd') = 2005-02-27 00:00:00
-- 减一天
dateadd(trans_date, 20, 'mm') = 2006-10-28 00:00:00
-- 加20个月,月份溢出,年份加1
若trans_date = 2005-02-28 00:00:00, dateadd(transdate, 1, 'mm') = 2005-03-28 00:00:00
若trans_date = 2005-01-29 00:00:00, dateadd(transdate, 1, 'mm') = 2005-02-28 00:00:00
-- 2005年2月没有29日,日期截取至当月最后一天
若trans_date = 2005-03-30 00:00:00, dateadd(transdate, -1, 'mm') = 2005-02-28 00:00:00

2、DATEDIFF
函数作用:计算两个时间date1、date2在指定时间单位datepart的差值。
语法示例:datediff(datetime date1, datetime date2, string datepart)
参数说明:
datet1、date2:Datetime类型,被减数和减数,若输入为String类型会隐式转换为Datetime类型后参与运算,其它类型抛异常。
datepart:String类型常量。支持扩展的日期格式。若datepart不符合指定格式或者其它类型则会发生异常。
使用示例:

start = 2005-12-31 23:59:59end = 2006-01-01 00:00:00:
    datediff(end, start, 'dd') = 1
    datediff(end, start, 'mm') = 1
    datediff(end, start, 'yyyy') = 1
    datediff(end, start, 'hh') = 1
    datediff(end, start, 'mi') = 1
    datediff(end, start, 'ss') = 1
    datediff('2013-05-31 13:00:00', '2013-05-31 12:30:00', 'ss') = 1800
    datediff('2013-05-31 13:00:00', '2013-05-31 12:30:00', 'mi') = 30start = 2018-06-04 19:33:23.234end = 2018-06-04 19:33:23.250 含毫秒的日期不属于标准Datetime式样,不能直接隐式转换,此处需进行显示转换:
 datediff(to_date('2018-06-04 19:33:23.250', 'yyyy-MM-dd hh:mi:ss.ff3'),to_date('2018-06-04 19:33:23.234', 'yyyy-MM-dd hh:mi:ss.ff3') , 'ff3') = 16

3、DATEPART
函数作用:提取日期date中指定的时间单位datepart的值。
语法示例:datepart(datetime date, string datepart)
参数说明:
date:Datetime类型,若输入为String类型会隐式转换为Datetime类型后参与运算,其它类型抛异常。
datepart:String类型常量,支持扩展的日期格式。若datepart不符合指定格式或者其它类型则会发生异常。
使用示例:

datepart('2013-06-08 01:10:00', 'yyyy')  =  2013
datepart('2013-06-08 01:10:00', 'mm')  =  6

4、DATETRUNC
函数作用:返回日期date被截取指定时间单位datepart后的日期值。
语法示例:datetrunc (datetime date, string datepart)
参数说明:date:Datetime类型,若输入为String类型会隐式转换为Datetime类型后参与运算,其它类型抛异常。
datepart:String类型常量,支持扩展的日期格式。若datepart不符合指定格式或者其它类型则会发生异常。
使用示例:

datetrunc('2011-12-07 16:28:46', 'yyyy') = 2011-01-01 00:00:00
datetrunc('2011-12-07 16:28:46', 'month') = 2011-12-01 00:00:00
datetrunc('2011-12-07 16:28:46', 'DD') = 2011-12-07 00:00:00

5、FROM_UNIXTIME
函数作用:将数字型的unix时间日期值unixtime转为日期值。
语法示例:from_unixtime(bigint unixtime)
参数说明:unixtime:Bigint类型,秒数,unix格式的日期时间值,若输入为String、Double、Decimal类型会隐式转换为Bigint后参与运算。
使用示例:`from_unixtime(123456789) = 1973-11-30 05:33:09

6、GETDATE
函数作用:获取当前系统时间。使用东八区时间作为MaxCompute标准时间。
语法示例:getdate()
使用示例:select getdate() from dual;
这里写图片描述

7、ISDATE
函数作用:判断一个日期字符串能否根据对应的格式串转换为一个日期值,如果转换成功,返回TRUE,否则返回FALSE。
语法示例:isdate(string date, string format)
参数说明:
date:String格式的日期值,若输入为Bigint、Double、Decimal或Datetime类型,会隐式转换为String类型后参与运算,其它类型报异常。
format:String类型常量,不支持日期扩展格式。其它类型或不支持的格式会抛异常。如果format中出现多余的格式串,则只取第一个格式串对应的日期数值,其余的会被视为分隔符。如isdate(“1234-yyyy”, “yyyy-yyyy”),会返回TRUE。

8、LASTDAY
函数作用:取date当月的最后一天,截取到天,时分秒部分为00:00:00。
语法示例:lastday(datetime date)
参数说明:date:Datetime类型,若输入为String 类型,会隐式转换为Datetime类型后参与运算,其它类型报异常。

9、TO_DATE
函数作用:将一个format格式的字符串date转成日期值。
语法示例:to_date(string date, string format)
参数说明:
date:String类型,要转换的字符串格式的日期值,若输入为Bigint、Double、Decimal或者Datetime类型,会隐式转换为String类型后参与运算,为其它类型则抛异常,为空串时抛异常。
format:String类型常量,日期格式。非常量或其他类型会引发异常。format不支持日期扩展格式,其他字符作为无用字符在解析时忽略。
format参数至少包含yyyy,否则引发异常,如果format中出现多余的格式串,则只取第一个格式串对应的日期数值,其余的会被视为分隔符。如to_date(“1234-2234”, “yyyy-yyyy”) 会返回1234-01-01 00:00:00。
使用示例:

to_date('阿里巴巴2010-12*03', '阿里巴巴yyyy-mm*dd') = 2010-12-03 00:00:00
to_date('20080718', 'yyyymmdd') = 2008-07-18 00:00:00
to_date('200807182030','yyyymmddhhmi') = 2008-07-18 20:30:00
to_date('2008718', 'yyyymmdd')
-- 格式不符合,引发异常
to_date('阿里巴巴2010-12*3', '阿里巴巴yyyy-mm*dd')
-- 格式不符合,引发异常
to_date('2010-24-01', 'yyyy')
-- 格式不符合,引发异常

10、TO_CHAR
函数作用:将日期类型date按照format指定的格式转成字符串。
语法示例:to_char(datetime date, string format)
参数说明:date:Datetime类型,要转换的日期值,若输入为String类型,会隐式转换为Datetime类型后参与运算,其它类型抛异常。
format:String类型常量。非常量或其他类型会引发异常。format中的日期格式部分会被替换成相应的数据,其它字符直接输出。
使用示例:

to_char('2010-12-03 00:00:00', '阿里金融yyyy-mm*dd') = '阿里金融2010-12*03'
to_char('2008-07-18 00:00:00', 'yyyymmdd') = '20080718' 
to_char('阿里巴巴2010-12*3', '阿里巴巴yyyy-mm*dd') -- 引发异常
to_char('2010-24-01', 'yyyy') -- 会引发异常
to_char('2008718', 'yyyymmdd') -- 会引发异常

11、WEEKDAY
函数说明:返回date日期当前周的第几天。
语法示例:weekday (datetime date)
参数说明:date:Datetime类型,若输入为String类型,会隐式转换为Datetime类型后参与运算,其它类型抛异常。

12、WEEKOFYEAR
函数作用:返回日期date位于那一年的第几周。周一作为一周的第一天。
语法示例:weekofyear(datetime date)
参数说明:date:Datetime类型日期值,若输入为String类型,会隐式转换为Datetime类型后参与运算,其它类型抛异常。
使用示例:select weekofyear(to_date("20141229", "yyyymmdd")) from dual;
-虽然20141229属于2014年,但是这一周的大多数日期是在2015年,因此返回结果为1,表示是2015年的第一周。
select weekofyear(to_date("20141231", "yyyymmdd")) from dual;--返回结果为1。
select weekofyear(to_date("20151229", "yyyymmdd")) from dual;--返回结果为53。

注:该日期函数整理参考阿里云帮助文档中的日期函数,帮助文档地址:https://help.aliyun.com/document_detail/48974.html?spm=a2c4g.11174283.6.643.wDCQSd

如有不当之处,请指正。

你可能感兴趣的:(数据库)