mysql的时间最晚日期_MySQL日期时间函数

NOW()、SYSDATE()、CURRENT_TIMESTAMP()

返回当前的日期和时间(以'yyyy-mm-dd hh:mm:ss'或yyyymmddhhmmss格式)

-- 2019-02-03 17:36:53

SELECT NOW()

-- 20190203173653.000000

SELECT CURRENT_TIMESTAMP() + 0

CURDATE()、CURRENT_DATE()

返回当前的日期(以'yyyy-mm-dd'或yyyymmdd格式)

-- 2019-02-03

SELECT CURDATE()

-- 2019-02-03

SELECT CURRENT_DATE()

-- 20190203

SELECT CURDATE() + 0

CURTIME()、CURRENT_TIME()

返回当前的时间(以'hh:mm:ss'或hhmmss格式)

-- 09:59:37

SELECT CURTIME()

-- 095937.000000

SELECT CURRENT_TIME() + 0

DATE()

返回日期或日期/时间表达式的日期部分

-- 2018-01-09

SELECT DATE('2018-01-09 09:45:45')

-- 2018-01-09

SELECT DATE('20180109')

-- NULL

SELECT DATE('123')

EXTRACT()

返回日期/时间的单独部分,比如年、月、日、小时、分钟等

语法:EXTRACT(unit FROM date)

其中unit值如下:

MICROSECOND、SECOND、MINUTE

HOUR、DAY、WEEK、MONTH、

QUARTER、YEAR、HOUR_MINUTE

DAY_MICROSECOND、DAY_SECOND

DAY_MINUTE、DAY_HOUR、YEAR_MONTH

SECOND_MICROSECOND、MINUTE_MICROSECOND MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND

SELECT EXTRACT(YEAR FROM NOW()) year,

EXTRACT(MONTH FROM NOW()) month,

EXTRACT(DAY FROM NOW()) day

DATE_ADD()、ADDDATE()

向日期添加指定的时间间隔,date参数是合法的日期表达式,expr参数是您希望添加的时间间隔(多个值以任意分隔符拼接)

语法:DATE_ADD(date,INTERVAL expr type)

type取值如下:

MICROSECOND、SECOND

MINUTE、HOUR

DAY、WEEK

MONTH、QUARTER

YEAR、SECOND_MICROSECOND

MINUTE_MICROSECOND、MINUTE_SECOND

HOUR_MICROSECOND、HOUR_SECOND

HOUR_MINUTE、DAY_MICROSECOND

DAY_SECOND、DAY_MINUTE

DAY_HOUR、YEAR_MONTH

-- 向指定字段添加两天

SELECT id,DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders

-- 向指定字段减30分钟

SELECT closing_time,DATE_ADD(closing_time,INTERVAL -30 MINUTE) FROM work_shift_detail

-- 向指定时间加1分1秒(1:1 1-1都行)

SELECT DATE_ADD('2017-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) result;

-- 综合示例:查询最晚打卡时间(下班打卡时间加上下班有效打卡时间)

SELECT DATE_ADD(closing_time,

INTERVAL + IF(ISNULL(closing_valid_time),0,closing_valid_time) MINUTE)

as lateClosingTime

DATE_SUB()、SUBDATE()

从日期减去指定的时间间隔,参数同date_add

语法:DATE_SUB(date,INTERVAL expr type)

-- 减去两天

SELECT DATE_SUB(OrderDate,INTERVAL 2 DAY)

DATEDIFF()

返回两个日期之间的天数,date1和date2参数是合法的日期或日期/时间表达式,只有值的日期部分参与计算

语法:DATEDIFF(date1,date2)

-- 1

SELECT DATEDIFF('2017-12-30','2017-12-29') AS DiffDate

-- 38

SELECT DATEDIFF('20171230','2017-11-22') AS DiffDate

-- 0

SELECT DATEDIFF('2008-12-30 19:20:54','2008-12-30 11:20:54') AS DiffDate

DATE_FORMAT()、STR_TO_DATE()

DATE_FORMAT(date,format),按指定格式对日期进行格式化操作

STR_TO_DATE(str,format),将指定格式字符串转换为日期

-- 2019-02-05

SELECT DATE_FORMAT(NOW(), "%Y-%m-%d")

-- 2019-02-05 16:19:03

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')

format取值如下:

TIME_FORMAT()

和date_format()类似,但time_format只处理小时、分钟和秒(其余符号产生一个null值或0)

语法:TIME_FORMAT(time,format)

-- 08 01

SELECT TIME_FORMAT('08:01:23','%h %i')

-- 08:01

SELECT TIME_FORMAT('2018-01-10 08:01:23','%h:%i')

UNIX_TIMESTAMP()

返回一个unix时间戳(从'1970-01-01 00:00:00'gmt开始的秒数,date默认值为当前时间)

语法:UNIX_TIMESTAMP()、UNIX_TIMESTAMP(date)

-- 1516423434

SELECT UNIX_TIMESTAMP()

-- 1516423424

SELECT UNIX_TIMESTAMP('2018-01-20 12:43:44')

FROM_UNIXTIME()

默认以'yyyy-mm-dd hh:mm:ss'或yyyymmddhhmmss格式返回时间戳的值(根据返回值所处上下文是字符串或数字)

语法:FROM_UNIXTIME(unix_timestamp)、FROM_UNIXTIME(unix_timestamp,format)

-- 2018-01-20 12:43:44

SELECT FROM_UNIXTIME(1516423424)

-- 18 01 20 12:51:55 2018

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%y %m %d %h:%i:%s %x')

TIME_TO_SEC()

返回time值有多少秒

语法:TIME_TO_SEC(time)

-- 80580

SELECT TIME_TO_SEC('22:23:00')

SEC_TO_TIME()

以'hh:mm:ss'或hhmmss格式返回秒数转成的time值(根据返回值所处上下文是字符串或数字)

语法:SEC_TO_TIME(seconds)

-- 22:23:00

SELECT SEC_TO_TIME(80580)

-- 222300.000000

SELECT SEC_TO_TIME(80580) + 0

DAYOFWEEK()

返回日期date是星期几(1=星期天,2=星期一,……7=星期六,odbc标准)

语法:DAYOFWEEK(date)

-- 结果:7

SELECT DAYOFWEEK('2018-01-20')

WEEKDAY()

返回日期date是星期几(0=星期一,1=星期二,……6=星期天)

语法:WEEKDAY(date)

-- 结果:5

SELECT WEEKDAY('2018-01-20 20:00:00')

DAYOFMONTH()

返回date是一月中的第几日(在1到31范围内)

语法:DAYOFMONTH(date)

-- 结果:20

SELECT DAYOFMONTH('2018-01-20')

DAYOFYEAR()

返回date是一年中的第几日(在1到366范围内)

语法:DAYOFYEAR(date)

-- 结果:51

SELECT DAYOFYEAR('2018-02-20')

MONTH()

返回date中的月份数值

语法:MONTH(date)

-- 结果:1

SELECT MONTH('2018-01-20')

DAYNAME()

返回date是星期几(按英文名返回)

语法:DAYNAME(date)

-- 结果:Saturday

SELECT DAYNAME('2018-01-20')

MONTHNAME()

返回date是几月(按英文名返回)

语法:MONTHNAME(date)

-- 结果:January

SELECT MONTHNAME('2018-01-20')

QUARTER()

返回date是一年的第几个季度

语法:QUARTER(date)

-- 结果:3

SELECT QUARTER('2018-08-20')

WEEK()

返回日期的星期数,mode默认值0,mode取值1表示周一是周的开始,0从周日开始

语法:WEEK(date[,mode])

-- 结果:2

SELECT WEEK('2018-01-20')

-- -- 结果:3

SELECT WEEK('2018-01-20',1)

YEAR()

返回date的年份(范围在1000到9999)

语法:YEAR(date)

-- 结果:2018

SELECT YEAR('2018-01-20')

HOUR()

返回time的小时数(范围是0到23)

语法:HOUR(time)

-- 结果:10

SELECT HOUR('10:05:03')

MINUTE()

返回time的分钟数(范围是0到59)

语法:MINUTE(time)

-- 结果:15

SELECT MINUTE('1998-02-03 10:15:03')

SECOND()

返回time的秒数(范围是0到59)

语法:YEAR(date)

-- 结果:30

SELECT SECOND('22:24:30')

PERIOD_ADD()

增加n个月到时期p并返回(p的格式yymm或yyyymm)

语法:PERIOD_ADD(P,N)

-- 结果:201809

SELECT PERIOD_ADD('201801',8)

SPERIOD_DIFF()

返回在时期p1和p2之间月数(p1和p2的格式yymm或yyyymm)

语法:PERIOD_DIFF(P1,P2)

-- 结果:11

SELECT PERIOD_DIFF(9802,199703)

TO_DAYS()

返回日期date是西元0年至今多少天(不计算1582年以前)

语法:TO_DAYS(date)

-- 结果:728779

SELECT TO_DAYS(950501)

-- 结果:737070

SELECT TO_DAYS('2018-01-11')

FROM_DAYS()

给出西元0年至今多少天返回date值(不计算1582年以前)

语法:FROM_DAYS(N)

-- 结果:2018-01-11

SELECT FROM_DAYS(737070)

作者:若汐缘

链接:https://www.jianshu.com/p/01296699e3e7

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值