SQL --时间语句
SELECT TO_DATE('2006-05-01 19:25:34','YYYY-MM-DD HH24:MI:SS') FROM DUAL
SELECT TO_DATE('2006-05-01 19:25','YYYY-MM-DD HH24:MI') FROM DUAL
SELECT TO_DATE('2006-05-01 19','YYYY-MM-DD HH24') FROM DUAL
SELECT TO_DATE('2006-05-01','YYYY-MM-DD') FROM DUAL
SELECT TO_DATE('2006-05','YYYY-MM') FROM DUAL
SELECT TO_DATE('2006','YYYY') FROM DUAL
current_date()/current_time()
返回当前时间,某年某月某日,current_time()等同于current_date。
SELECT CURDATE()# 返回值:# '2020-10-09'
date是日期,time是具体的时间。
mysql> SELECT CURDATE();
+------------------------------------------------------+|
CURDATE()
+------------------------------------------------------+|
1997-12-15
+------------------------------------------------------
+1 row in set (0.00 sec)
CURTIME()
根据函数究竟用于字符串或数字上下文,
选择以 'HH:MM:SS' 还是 HHMMSS 格式返回当前时间值(以当前时区来定)。
mysql> SELECT CURTIME();
+------------------------------------------------------+|
CURTIME()
+------------------------------------------------------+|
23:50:26
对年,月,日进行节选:
SELECT YEAR('98-02-03')# 返回值 1998
SELECT MONTH('98-02-03')# 返回值 02
SELECT DAY('98-02-03')# 返回值 3
DATE(expr)
提取日期或日期时间表达式expr中的日期部分。
mysql> SELECT DATE('2003-12-31 01:02:03');
+------------------------------------------------------+|
DATE('2003-12-31 01:02:03')
+------------------------------------------------------+|
2003-12-31
DATEDIFF()
语法:DATEDIFF(expr1,expr2)
DATEDIFF()将返回expr1 - expr2的值,用来表示两个日期相差的天数。expr1 和 expr2 都是日期或日期时间表达式。运算中只用到了这些值的日期部分。
SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30')
#返回结果1
date_sub()/date_add()
语法格式:
DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)
执行日期计算的两种函数。date 是一个用来指定开始日期的 DATETIME 或 DATE 值。expr 是一种以字符串形式呈现的表达式,用来指定从开始日期增加或减少的间隔值。如果是负的间隔值,则 expr 值的第一个字符是-号。unit 是一个单位关键字,用来指定expr表达式应该采取的单位。
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
+-----------------------------------------------------+|
DATE_ADD('1998-01-02', INTERVAL 31 DAY)+-----------------------------------------------------+|
1998-02-02
ADDTIME(expr1, expr2)
ADDTIME()将 expr2 参数加到 expr1 参数上,返回结果。expr1 是一个时间或日期时间表达式。expr2 是一个时间表达式。
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
+------------------------------------------------------+|
DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002')
+------------------------------------------------------+|
1998-01-02 01:01:01.000001
+------------------------------------------------------+
时间戳的定义
时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
UNIX时间戳的0按照ISO 8601规范为 :1970-01-01 T00:00:00Z.
一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。
在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。
UNIX_TIMESTAMP(date)
若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数,得到当前时间戳 。
若用date 来调用 UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个 DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD或YYYMMDD格式的数字。