mysql日期函数

日期操作是mysql中的常用操作,掌握常用的日期函数、并熟练组合运用能够帮助我们解决查询中的许多难题。
本次笔记主要介绍常用的日期函数,在之后的笔记中可能会介绍几个稍微复杂的日期函数组合使用场景。

笔记大纲:
~~·获取当前日期与时间
~~·获取日期或时间中的某一部分
~~·日期运算

1、获取当前日期与时间
now()、current_timestamp() —— 获取系统执行该语句的日期与时间
sysdate() —— 获取执行到该函数的日期与时间
current_date() —— 获取系统当前日期
current_time() —— 获取系统当前时间
unix_timestamp(now()) —— 获取当前时间戳

mysql> select now(),current_timestamp(),sysdate();
+---------------------+---------------------+---------------------+
| now()               | current_timestamp() | sysdate()           |
+---------------------+---------------------+---------------------+
| 2018-10-09 18:07:12 | 2018-10-09 18:07:12 | 2018-10-09 18:07:12 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2018-10-09     |
+----------------+
1 row in set (0.00 sec)

mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 18:00:30       |
+----------------+
1 row in set (0.00 sec)

mysql> select unix_timestamp(now());
+-----------------------+
| unix_timestamp(now()) |
+-----------------------+
|            1539079679 |
+-----------------------+
1 row in set (0.00 sec)

2、获取日期或时间中的某一部分
年 year()、月 month()、日 day()
时 hour()、分 minute()、秒 second()

mysql> select year(now()),month(now()),day(now());
+-------------+--------------+------------+
| year(now()) | month(now()) | day(now()) |
+-------------+--------------+------------+
|        2018 |           10 |          9 |
+-------------+--------------+------------+
1 row in set (0.00 sec)

mysql> select hour(now()),minute(now()),second(now());
+-------------+---------------+---------------+
| hour(now()) | minute(now()) | second(now()) |
+-------------+---------------+---------------+
|          18 |            13 |            57 |
+-------------+---------------+---------------+
1 row in set (0.00 sec)

获取日期/时间中月名、周名等
monthname(date)
dayname(date)

mysql> select monthname('1990-05-07 13:00:00') as month_name,
    -> dayname('1990-05-07 13:00:00') as day_name;
+------------+----------+
| month_name | day_name |
+------------+----------+
| May        | Monday   |
+------------+----------+
1 row in set (0.00 sec)

除了以上函数,还可用date_format获取日期/时间中的某部分,该函数也可输出指定格式的日期/时间。

mysql> select date_format('1990-05-07 23:24:15', '%Y') as '年',
    -> date_format('1990-05-07 23:24:15', '%m') as '月',
    -> date_format('1990-05-07 23:24:15', '%d') as '日',
    -> date_format('1990-05-07 23:24:15', '%H') as '时',
    -> date_format('1990-05-07 23:24:15', '%m') as '分',
    -> date_format('1990-05-07 23:24:15', '%s') as '秒';
+------+------+------+------+------+------+
| 年   | 月   | 日   | 时   | 分   | 秒   |
+------+------+------+------+------+------+
| 1990 | 05   | 07   | 23   | 05   | 15   |
+------+------+------+------+------+------+
1 row in set (0.00 sec)

mysql> select date_format('1990-05-07 23:24:15','%Y%m%d') as date;
+----------+
| date     |
+----------+
| 19900507 |
+----------+
1 row in set (0.00 sec)

3、日期运算
datediff(date1,date2) —— 计算日期差(date1-date2)
timediff(time1,time2) —— 计算时间差(time1-time2)

mysql> select datediff('1990-05-07 13:00:00','1990-05-08 13:00:00');
+-------------------------------------------------------+
| datediff('1990-05-07 13:00:00','1990-05-08 13:00:00') |
+-------------------------------------------------------+
|                                                    -1 |
+-------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select timediff('1990-05-07 13:00:00','1990-05-08 13:00:00');
+-------------------------------------------------------+
| timediff('1990-05-07 13:00:00','1990-05-08 13:00:00') |
+-------------------------------------------------------+
| -24:00:00                                             |
+-------------------------------------------------------+
1 row in set (0.00 sec)

指定值的日期运算
date_add(date, interval (-)n year/month/day等)

mysql> select date_add('1990-05-07 13:00:00', interval 5 year);
+--------------------------------------------------+
| date_add('1990-05-07 13:00:00', interval 5 year) |
+--------------------------------------------------+
| 1995-05-07 13:00:00                              |
+--------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('1990-05-07 13:00:00', interval -5 day);
+--------------------------------------------------+
| date_add('1990-05-07 13:00:00', interval -5 day) |
+--------------------------------------------------+
| 1990-05-02 13:00:00                              |
+--------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('1990-05-07 13:00:00', interval 10 minute);
+-----------------------------------------------------+
| date_add('1990-05-07 13:00:00', interval 10 minute) |
+-----------------------------------------------------+
| 1990-05-07 13:10:00                                 |
+-----------------------------------------------------+
1 row in set (0.00 sec)

获取该月的最后一天
last_day(date)

mysql> select last_day('1990-05-07 13:00:00');
+---------------------------------+
| last_day('1990-05-07 13:00:00') |
+---------------------------------+
| 1990-05-31                      |
+---------------------------------+
1 row in set (0.00 sec)

dayofyear(date) —— date位于全年中的第几天
dayofmonth(date) —— date位于该月中的第几天
dayofweek(date) —— date位于该周中的第几天(1表示星期天)

mysql> select dayofyear('1990-05-07 13:00:00') as year_num,
    -> dayofmonth('1990-05-07 13:00:00') as month_num,
    -> dayofweek('1990-05-07 13:00:00') as week_num;
+----------+-----------+----------+
| year_num | month_num | week_num |
+----------+-----------+----------+
|      127 |         7 |        2 |
+----------+-----------+----------+
1 row in set (0.00 sec)

持续补充中~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容