SQL分析提供了常见的日期函数,您可以根据实际需要选择合适的日期函数,完成日期计算、日期转换。本文为您提供SQL分析支持的日期函数的命令格式、参数说明及示例,指导您使用日期函数完成开发。
函数 | 功能 |
计算日期值增加指定月数后的日期。 | |
返回当前TIMESTAMP类型的时间戳。 | |
按照指定的幅度增减天数,与 | |
按照指定的幅度增减天数,与 | |
返回日期值的天。 | |
返回日期中日的值。 | |
返回日期的星期值。 | |
返回日期是当年中第几天。 | |
获取日期TIMESTAMP中指定单位的部分。 | |
将数字型的UNIX值转换为日期值。 | |
获取当前系统时间。 | |
返回日期小时部分的值。 | |
将STRING类型日期值转换为INTERVAL_DAY_TIME类型变量。 | |
判断一个日期字符串能否根据指定的格式串转换为一个日期值。 | |
返回日期值所在月份的最后一天日期。 | |
获取日期所在月的最后一天。 | |
返回日期分钟部分的值。 | |
返回日期值所属月份。 | |
返回指定日期值间的月数。 | |
返回大于日期值且与指定周相匹配的第一个日期。 | |
返回当前系统日期与时间。 | |
返回日期值所属季度。 | |
返回日期秒数部分的值。 | |
将日期按照指定格式转换为字符串。 | |
将指定格式的字符串转换为日期值。 | |
将日期转换为整型的UNIX格式的日期值。 | |
返回日期值是当前周的第几天。 | |
返回日期值位于当年的第几周。 | |
返回日期值的年。 |
ADD_MONTHS
命令格式
string add_months(date|datetime|timestamp|string <startdate>, int <num_months>)
命令说明
返回开始日期startdate增加num_months个月后的日期。
参数说明
startdate:必填。DATE、DATETIME、TIMESTAMP或STRING类型,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。num_months:必填。INT型数值。
返回值说明
返回STRING类型的日期值,格式为
yyyy-mm-dd
。返回规则如下:startdate非DATE、DATETIME、TIMESTAMP或STRING类型,或格式不符合要求时,返回NULL。
startdate值为NULL时,返回报错。
num_months值为NULL时,返回NULL。
示例
--返回2017-05-14。
select add_months('2017-02-14',3);
--返回0017-05-14。
select add_months('17-2-14',3);
--返回2017-05-14。
select add_months('2017-02-14 21:30:00',3);
--返回NULL。
select add_months('20170214',3);
--返回NULL。
select add_months('2017-02-14 21:30:00',null);
CURRENT_TIMESTAMP
命令格式
timestamp current_timestamp()
命令说明
返回当前TIMESTAMP类型的时间戳,值不固定。
返回值说明
返回TIMESTAMP类型。
示例
select current_timestamp();
DATE_ADD
命令格式
date date_add(date|timestamp|string <startdate>, bigint <delta>)
命令说明
按照delta幅度增减startdate日期的天数。如果您需要获取在当前时间基础上指定变动幅度的日期,请结合GETDATE函数使用。
本命令与DATE_SUB的增减逻辑相反。
参数说明
startdate:必填。起始日期值。支持DATE、DATETIME或STRING类型。
如果参数为STRING类型,则会隐式转换为DATE类型后参与运算,且STRING参数格式至少要包含
'yyyy-mm-dd'
。例如'2019-12-27'
。delta:必填。修改幅度。BIGINT类型。如果delta大于0,则增;delta小于0,则减;delta等于0,不增不减。
返回值说明
返回DATE类型,格式为
yyyy-mm-dd
。返回规则如下:startdate非DATE、DATETIME或STRING类型时,返回报错。
startdate值为NULL时,返回报错。
delta值为NULL时,返回NULL。
示例
--返回2005-03-01。加1天,结果超出当年2月份的最后1天,实际值为下个月的第1天。
select date_add(datetime '2005-02-28 00:00:00', 1);
--返回2005-02-27。减1天。
select date_add(date '2005-02-28', -1);
--返回2005-03-20。
select date_add('2005-02-28 00:00:00', 20);
--假设当前时间为2020-11-17 16:31:44,返回2020-11-16。
select date_add(getdate(),-1);
--返回NULL。
select date_add('2005-02-28 00:00:00', null);
DATE_SUB
命令格式
date date_sub(date|timestamp|string <startdate>, bigint <delta>)
命令说明
按照delta幅度增减startdate日期的天数。如果您需要获取在当前时间基础上指定变动幅度的日期,请结合GETDATE函数使用。
本命令与DATE_ADD的增减逻辑相反。
参数说明
startdate:必填。起始日期值。支持DATE、DATETIME或STRING类型。
如果参数为STRING类型,则会隐式转换为DATE类型后参与运算,且STRING参数格式至少要包含
'yyyy-mm-dd'
。例如'2019-12-27'
。delta:必填。修改幅度。BIGINT类型。如果delta大于0,则减;delta小于0,则增;delta等于0,不增不减。
返回值说明
返回DATE类型,格式为
yyyy-mm-dd
。返回规则如下:startdate非DATE、DATETIME或STRING类型时,返回报错。
startdate值为NULL时,返回报错。
delta值为NULL时,返回NULL。
示例
--返回2005-02-28。减1天,实际值为上个月的最后1天。
select date_sub(datetime '2005-03-01 00:00:00', 1);
--返回2005-03-01。增1天。
select date_sub(date '2005-02-28', -1);
--返回2005-02-27。减2天。
select date_sub('2005-03-01 00:00:00', 2);
--假设当前时间为2021-09-10 16:31:44,返回2021-09-09。
select date_sub(getdate(),1);
--返回NULL。
select date_sub('2005-03-01 00:00:00', null);
DAY
命令格式
int day(datetime|timestamp|date|string <date>)
命令说明
返回一个日期的天。
参数说明
date:必填。DATETIME、TIMESTAMP、DATE或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP、DATE或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回1。
select day('2014-09-01');
--返回NULL。
select day('20140901');
--返回NULL。
select day(null);
DAYOFMONTH
命令格式
int dayofmonth(datetime|timestamp|date|string <date>)
命令说明
返回日期中日的值。
参数说明
date:必填。DATETIME、TIMESTAMP、DATE或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP、DATE或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回1。
select dayofmonth('2014-09-01');
--返回NULL。
select dayofmonth('20140901');
--返回NULL。
select dayofmonth(null);
DAYOFWEEK
命令格式
int dayofweek(datetime|timestamp|date|string <date>)
命令说明
返回日期的星期值。
参数说明
date:必填。DATETIME、TIMESTAMP、DATE或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP、DATE或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
返回值的取值范围为1~7,与星期的对应关系为1=Sunday, 2=Monday,...,7=Saturday。
示例
--返回5,即Thursday。 SELECT dayofweek('2009-07-30');
DAYOFYEAR
命令格式
int dayofyear(datetime|timestamp|date|string <date>)
命令说明
返回日期是当年中的第几天。
参数说明
date:必填。DATETIME、TIMESTAMP、DATE或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP、DATE或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回100。 SELECT dayofyear('2016-04-09');
EXTRACT
命令格式
int extract(<datepart> from date|datetime|timestamp <date>)
命令说明
提取日期date中指定单位datepart的部分。
参数说明
datepart:必填。支持YEAR、MONTH、DAY、HOUR或MINUTE等时间取值。
date:必填。DATE、DATETIME、TIMESTAMP或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。
返回值
返回INT类型。返回规则如下:
datepart非YEAR、MONTH、DAY、HOUR或MINUTE等时间取值时,返回报错。
datepart值为NULL时,返回报错。
date非DATE、DATETIME、TIMESTAMP或STRING类型或为NULL时,返回NULL。
示例
select extract(year from '2019-05-01 11:21:00') year
,extract(month from '2019-05-01 11:21:00') month
,extract(day from '2019-05-01 11:21:00') day
,extract(hour from '2019-05-01 11:21:00') hour
,extract(minute from '2019-05-01 11:21:00') minute;
--返回值如下。
+------+-------+------+------+--------+
| year | month | day | hour | minute |
+------+-------+------+------+--------+
| 2019 | 5 | 1 | 11 | 21 |
+------+-------+------+------+--------+
--返回NULL。
select extract(year from null);
FROM_UNIXTIME
命令格式
datetime from_unixtime(bigint <unixtime>)
命令说明
将数字型的UNIX时间日期值unixtime转为日期值。
参数说明
unixtime:必填。BIGINT类型,秒数,UNIX格式的日期时间值。如果输入为STRING、DOUBLE或DECIMAL类型,则会隐式转换为BIGINT后参与运算。
返回值说明
返回DATETIME类型,格式为
yyyy-mm-dd hh:mi:ss
。unixtime值为NULL时,返回NULL。说明Hive兼容模式下(
set odps.sql.hive.compatible=true;
),如果输入参数是STRING类型,返回值也是STRING类型。示例
--返回1973-11-30 05:33:09。
select from_unixtime(123456789);
GETDATE
命令格式
datetime getdate()
命令说明
获取当前系统时间。使用东八区时间作为SQL分析标准时间。
返回值说明
返回当前日期和时间,DATETIME类型。
HOUR
命令格式
int hour(datetime|timestamp|string <date>)
命令说明
返回日期小时部分的值。
参数说明
date:必填。DATETIME、TIMESTAMP或STRING类型日期值,格式为
yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回12。
select hour('2014-09-01 12:00:00');
--返回12。
select hour('12:00:00');
--返回NULL。
select hour('20140901120000');
--返回NULL。
select hour(null);
INTERVAL_DAY_TIME
命令格式
interval_day_time(string <date>)
命令说明
将给定日期date转换为INTERVAL_DAY_TIME类型的变量。
参数说明
date:必填。STRING类型日期值。格式为
dd hh:mi:ss.ff3
,至少需要包含dd hh:mm
,否则会报错。返回值说明
返回INTERVAL_DAY_TIME类型。如果输入参数为NULL,则返回NULL。
示例
--返回1 00:00:00.000000000。 select interval_day_time("01 00:00:00"); --返回1 11:22:00.000000000。 select interval_day_time("01 11:22"); --返回12 01:02:03.999000000。 select interval_day_time("12 01:02:03.999");
ISDATE
命令格式
boolean isdate(string <date>, string <format>)
命令说明
判断一个日期字符串能否根据指定的格式串转换为一个日期值。如果能转换成功,返回True;否则返回False。
参数说明
date:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,会隐式转换为STRING类型后参与运算。
format:必填。STRING类型常量,不支持日期扩展格式。如果format中出现多余的格式串,则只取第一个格式串对应的日期数值,其余的会被视为分隔符。例如
isdate("1234-yyyy", "yyyy-yyyy")
,会返回True。
返回值说明
返回BOOLEAN类型。date或format值为NULL时,返回NULL。
示例
--返回True。
select isdate('2021-10-11','yyyy-mm-dd');
--返回false。
select isdate(1678952314,'yyyy-mm-dd');
LAST_DAY
命令格式
string last_day(date|datetime|timestamp|string <date>)
命令说明
返回该日期所在月份的最后一天日期。
参数说明
date:必填。DATE、DATETIME、TIMESTAMP或STRING类型日期值。取值为STRING类型格式时,至少要包含
yyyy-mm-dd
且不含多余的字符串。返回值说明
返回STRING类型的日期值,格式为
yyyy-mm-dd
。返回规则如下:date非DATE、DATETIME、TIMESTAMP或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回报错。
示例
--返回2017-03-31。
select last_day('2017-03-04');
--返回2017-07-31。
select last_day('2017-07-04 11:40:00');
--返回NULL。
select last_day('20170304');
LASTDAY
命令格式
datetime lastday(datetime <date>)
命令说明
取date所在月的最后一天,截取到天,时分秒部分为
00:00:00
。参数说明
date:DATETIME类型日期值,格式为
yyyy-mm-dd hh:mi:ss
。返回值说明
返回DATETIME类型,格式为
yyyy-mm-dd hh:mi:ss
。返回规则如下:date非DATETIME或STRING类型,或格式不符合要求时,会返回报错。
date值为NULL时,返回NULL。
示例
--返回2013-06-30 00:00:00。
select lastday (datetime '2013-06-08 01:10:00');
--返回2013-06-30 00:00:00。
select lastday ('2013-06-08 01:10:00');
--返回NULL。
select lastday (null);
MINUTE
命令格式
int minute(datetime|timestamp|string <date>)
命令说明
返回日期分钟部分的值。
参数说明
date:必填。DATETIME、TIMESTAMP或STRING类型日期值,格式为
yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回30。
select minute('2014-09-01 12:30:00');
--返回30。
select minute('12:30:00');
--返回NULL。
select minute('20140901120000');
--返回NULL。
select minute(null);
MONTH
命令格式
int month(datetime|timestamp|date|string <date>)
命令说明
返回一个日期的月份。
参数说明
date:必填。DATETIME、TIMESTAMP、DATE或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP、DATE或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回9。
select month('2014-09-01');
--返回NULL。
select month('20140901');
--返回NULL。
select month(null);
MONTHS_BETWEEN
命令格式
double months_between(datetime|timestamp|date|string <date1>, datetime|timestamp|date|string <date2>)
命令说明
返回日期date1和date2之间的月数。
参数说明
date1、date2:必填。DATETIME、TIMESTAMP、DATE或STRING类型,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回DOUBLE类型。返回规则如下:
当date1晚于date2时,返回值为正。当date2晚于date1时,返回值为负。
当date1和date2分别对应两个月的最后一天,返回整数月;否则计算方式为date1减去date2的天数除以31天。
date1或date2值为NULL时,返回NULL。
示例
--返回3.9495967741935485。
select months_between('1997-02-28 10:30:00', '1996-10-30');
--返回-3.9495967741935485。
select months_between('1996-10-30','1997-02-28 10:30:00' );
--返回-3.0。
select months_between('1996-09-30','1996-12-31');
--返回NULL。
select months_between('1996-09-30',null);
NEXT_DAY
命令格式
string next_day(timestamp|date|datetime|string <startdate>, string <week>)
命令说明
返回大于指定日期startdate并且与week相匹配的第一个日期,即下周几的具体日期。
参数说明
startdate:必填。TIMESTAMP、DATE、DATETIME或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。week:必填。STRING类型,一个星期前2个或3个字母,或者一个星期的全名。例如MO、TUE或FRIDAY。
返回值说明
返回STRING类型的日期值,格式为
yyyy-mm-dd
。返回规则如下:date非TIMESTAMP、DATE、DATETIME或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回报错。
week值为NULL时,返回NULL。
示例
--返回2017-08-08。
select next_day('2017-08-01','TU');
--返回2017-08-08。
select next_day('2017-08-01 23:34:00','TU');
--返回NULL。
select next_day('20170801','TU');
--返回NULL。
select next_day('2017-08-01 23:34:00',null);
NOW
命令格式
datetime NOW()
命令说明
返回当前系统日期与时间。
返回值说明
返回DATETIME类型,格式为
yyyy-mm-dd hh:mi:ss.SSS
。示例
不指定格式,返回毫秒位可能为1位、2位或者3位:
select now();
返回结果如下:
+------+ | _c0 | +------+ | 2023-06-13 10:53:24.967 | +------+
指定时间格式:
select date_format(now(),'yyyy-MM-dd hh:mm:ss.SSS') ;
返回结果如下:
+-----+ | _c0 | +-----+ | 2023-06-13 10:53:53.899 | +-----+
QUARTER
命令格式
int quarter (datetime|timestamp|date|string <date>)
命令说明
返回一个日期的季度,范围是1~4。
参数说明
date:必填。DATETIME、TIMESTAMP、DATE或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP、DATE或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回4。
select quarter('1970-11-12 10:00:00');
--返回4。
select quarter('1970-11-12');
--返回NULL。
select quarter(null);
SECOND
命令格式
int second(datetime|timestamp|string <date>)
命令说明
返回日期秒数部分的值。
参数说明
date:必填。DATETIME、TIMESTAMP或STRING类型日期值,格式为
yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。返回值说明
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回45。
select second('2014-09-01 12:30:45');
--返回45。
select second('12:30:45');
--返回NULL。
select second('20140901123045');
--返回NULL。
select second(null);
TO_CHAR
命令格式
string to_char(datetime <date>, string <format>)
命令说明
将日期类型date按照format指定的格式转成字符串。
参数说明
date:必填。DATETIME类型日期值,格式为
yyyy-mm-dd hh:mi:ss
。如果输入为STRING类型,会隐式转换为DATETIME类型后参与运算。format:必填。STRING类型常量。format中的日期格式部分会被替换成相应的数据,其他字符直接输出。
返回值说明
返回STRING类型。返回规则如下:
date非DATETIME或STRING类型时,返回报错。
date值为NULL时,返回报错。
format值为NULL时,返回NULL。
示例
--返回20080718。
select to_char(datetime'2008-07-18 00:00:00', 'yyyymmdd');
--返回20080718。
select to_char('2008-07-18 00:00:00', 'yyyymmdd');
--'阿里巴巴2010-12*3'无法转换为符合要求的格式,会引发异常,应该为'阿里巴巴2010-12*03'。
select to_char(datetime'阿里巴巴2010-12*3', '阿里巴巴yyyy-mm*dd');
--'20102401'不是标准日期值,引发异常,应该为'2010-01-24 00:00:00'。
select to_char(datetime'20102401', 'yyyy');
--'2008718'不是标准日期值,引发异常,应该为'2008-07-18 00:00:00'。
select to_char(datetime'2008718', 'yyyymmdd');
--返回NULL。
select to_char(datetime'2010-12-03 00:00:00', null);
TO_DATE
命令格式
datetime to_date(string <date>, string <format>)
命令说明
将date转换成符合format格式的日期值。
参数说明
date:必填。STRING类型,要转换的字符串格式的日期值。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算。该函数还支持ISO8601时间格式的字符串。
format:必填。STRING类型常量,日期格式。format不支持日期扩展格式,其他字符在解析时当作无用字符忽略。
format:参数至少包含
yyyy
,否则会返回NULL。如果format中出现多余的格式串,则只取第一个格式串对应的日期数值,其余的会被视为分隔符。例如to_date("1234-2234", "yyyy-yyyy")
会返回1234-01-01 00:00:00
。format格式:
yyyy
为4位数的年,mm
为2位数的月,dd
为2位数的日,hh
为24小时制的时,mi
为2位数的分钟,ss
为2位数秒,ff3
为3位精度毫秒。
返回值说明
返回DATETIME类型,格式为
yyyy-mm-dd hh:mi:ss
。date或format值为NULL时,返回NULL。示例
--返回2010-12-03 00:00:00。
select to_date('阿里巴巴2010-12*03', '阿里巴巴yyyy-mm*dd');
--返回2008-07-18 00:00:00。
select to_date('20080718', 'yyyymmdd');
--返回2008-07-18 20:30:00。
select to_date('200807182030','yyyymmddhhmi');
--'2008718'无法转为标准日期值,引发异常,应该为'20080718'。
select to_date('2008718', 'yyyymmdd');
--'阿里巴巴2010-12*3'无法转为标准日期值,引发异常,应该为'阿里巴巴2010-12*03'。
select to_date('阿里巴巴2010-12*3', '阿里巴巴yyyy-mm*dd');
--'2010-24-01'无法转为标准日期值,引发异常,应该为'2010-01-24'。
select to_date('2010-24-01', 'yyyy');
--返回2018-10-30 15:13:12。
select to_date('20181030 15-13-12.345','yyyymmdd hh-mi-ss.ff3');
--返回NULL。
select to_date(null,'yyyymmdd hh-mi-ss.ff3');
--返回NULL。
select to_date('20181030 15-13-12.345',null);
--ISO8601时间格式,返回2021-09-24 13:39:34。
select to_date('2021-09-24T13:39:34.119Z', 'yyyy-MM-ddThh:mi:ss.ff3Z');
UNIX_TIMESTAMP
命令格式
bigint unix_timestamp(datetime|date|timestamp|string <date>)
命令说明
将日期date转化为整型的UNIX格式的日期时间值。
参数说明
date:必填。DATETIME、DATE、TIMESTAMP或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。如果输入为STRING类型,则会隐式转换为DATETIME类型后参与运算。当打开新数据类型属性时,隐式转换会失败,此时需要通过cast
函数转换或关闭新数据类型,例如unix_timestamp(cast(... as datetime))
。返回值说明
返回BIGINT类型,表示UNIX格式日期值。返回规则如下:
date非DATETIME、DATE、TIMESTAMP或STRING类型,或格式不符合要求时,返回报错。
date值为NULL时,返回NULL。
示例
--返回1237518660。
select unix_timestamp(datetime'2009-03-20 11:11:00');
--返回1237518660。
select unix_timestamp('2009-03-20 11:11:00');
--返回NULL。
select unix_timestamp(null);
WEEKDAY
命令格式
bigint weekday (datetime <date>)
命令说明
返回date日期是当前周的第几天。
参数说明
date:必填。DATETIME类型日期值。格式为
yyyy-mm-dd hh:mi:ss
。如果输入为STRING类型,则会隐式转换为DATETIME类型后参与运算。返回值说明
返回BIGINT类型。返回规则如下:
周一作为一周的第一天,返回值为0。其他日期依次递增,周日返回6。
date非DATETIME或STRING类型,或格式不符合要求时,返回报错。
date值为NULL时,返回NULL。
示例
--返回4。
select weekday (datetime '2009-03-20 11:11:00');
--返回4。
select weekday ('2009-03-20 11:11:00');
--返回NULL。
select weekday (null);
WEEKOFYEAR
命令格式
bigint weekofyear (datetime <date>)
命令说明
返回日期date位于那一年的第几周。周一作为一周的第一天。
说明这一周算上一年还是下一年,取决于这一周的大多数日期(4天以上)在哪一年。算在前一年,就是前一年的最后一周;算在后一年就是后一年的第一周。
参数说明
date:必填。DATETIME类型日期值。格式为
yyyy-mm-dd hh:mi:ss
。如果输入为STRING类型,则会隐式转换为DATETIME类型后参与运算。返回值说明
返回BIGINT类型。返回规则如下:
date非DATETIME或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回1。虽然20141229属于2014年,但是这一周的大多数日期是在2015年,因此返回结果为1,表示是2015年的第一周。
select weekofyear(to_date("20141229", "yyyymmdd"));
--返回1。
select weekofyear(to_date("20141231", "yyyymmdd"));
--返回53。
select weekofyear(to_date("20151229", "yyyymmdd"));
--返回48。
select weekofyear('2021-11-29 00:01:00');
--返回NULL。
select weekofyear('20141231');
--返回NULL。
select weekofyear(null);
YEAR
命令格式
int year(datetime|timestamp|date|string <date>)
命令说明
返回日期date的年。
参数说明
date:必填。DATETIME、TIMESTAMP、DATE或STRING类型日期值,格式为
yyyy-mm-dd
、yyyy-mm-dd hh:mi:ss
或yyyy-mm-dd hh:mi:ss.ff3
。取值为STRING类型格式时,至少要包含yyyy-mm-dd
且不含多余的字符串。返回值
返回INT类型。返回规则如下:
date非DATETIME、TIMESTAMP、DATE或STRING类型,或格式不符合要求时,返回NULL。
date值为NULL时,返回NULL。
示例
--返回1970。
select year('1970-01-01 12:30:00');
--返回1970。
select year('1970-01-01');
--返回70。
select year('70-01-01');
--返回NULL。
select year('1970/03/09');
--返回NULL。
select year(null);