mysql 中 時間和日期函數

1.1 得到當前日期+時間(date + time)函數:now()

mysql> select now();

+---------------------+
| now()               |
+---------------------+
| 2008-08-08 22:20:46 |
+---------------------+

除了 now() 函數能得到當前的日期時間外,MySQL 中還有下面的函數:

 current_timestamp()
,current_timestamp
,localtime()
,localtime
,localtimestamp    -- (v4.0.6)
,localtimestamp()  -- (v4.0.6)

這些日期時間函數,都等同於 now()。鑑於 now() 函數簡短易記,建議老是使用 now() 來替代上面列出的函數。

1.2 得到當前日期+時間(date + time)函數:sysdate()

sysdate() 日期時間函數跟 now() 相似,不一樣之處在於:now() 在執行開始時值就獲得了, sysdate() 在函數執行時動態獲得值。看下面的例子就明白了:

mysql> select now(), sleep(3), now();

+---------------------+----------+---------------------+
| now()               | sleep(3) | now()               |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:21 |        0 | 2008-08-08 22:28:21 |
+---------------------+----------+---------------------+

mysql> select sysdate(), sleep(3), sysdate();

+---------------------+----------+---------------------+
| sysdate()           | sleep(3) | sysdate()           |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:41 |        0 | 2008-08-08 22:28:44 |
+---------------------+----------+---------------------+

能夠看到,雖然中途 sleep 3 秒,但 now() 函數兩次的時間值是相同的; sysdate() 函數兩次獲得的時間值相差 3 秒。MySQL Manual 中是這樣描述 sysdate() 的:Return the time at which the function executes。

sysdate() 日期時間函數,通常狀況下不多用到。

2. 得到當前日期(date)函數:curdate()

mysql> select curdate();

+------------+
| curdate()  |
+------------+
| 2008-08-08 |
+------------+

其中,下面的兩個日期函數等同於 curdate():

 current_date()
,current_date

3. 得到當前時間(time)函數:curtime()

mysql> select curtime();

+-----------+
| curtime() |
+-----------+
| 22:41:30  |
+-----------+

其中,下面的兩個時間函數等同於 curtime():

 current_time()
,current_time

4. 得到當前 UTC 日期時間函數:utc_date(), utc_time(), utc_timestamp()

mysql> select utc_timestamp(), utc_date(), utc_time(), now()

+---------------------+------------+------------+---------------------+
| utc_timestamp()     | utc_date() | utc_time() | now()               |
+---------------------+------------+------------+---------------------+
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11   | 2008-08-08 22:47:11 |
+---------------------+------------+------------+---------------------+

由於我國位於東八時區,因此本地時間 = UTC 時間 + 8 小時。UTC 時間在業務涉及多個國家和地區的時候,很是有用。
2、MySQL 日期時間 Extract(選取) 函數。

1. 選取日期時間的各個部分:日期、時間、年、季度、月、日、小時、分鐘、秒、微秒

set @dt = '2008-09-10 07:15:30.123456';

select date(@dt);        -- 2008-09-10
select time(@dt);        -- 07:15:30.123456
select year(@dt);        -- 2008
select quarter(@dt);     -- 3
select month(@dt);       -- 9
select week(@dt);        -- 36
select day(@dt);         -- 10
select hour(@dt);        -- 7
select minute(@dt);      -- 15
select second(@dt);      -- 30
select microsecond(@dt); -- 123456

2. MySQL Extract() 函數,能夠上面實現相似的功能:

set @dt = '2008-09-10 07:15:30.123456';

select extract(year                from @dt); -- 2008
select extract(quarter             from @dt); -- 3
select extract(month               from @dt); -- 9
select extract(week                from @dt); -- 36
select extract(day                 from @dt); -- 10
select extract(hour                from @dt); -- 7
select extract(minute              from @dt); -- 15
select extract(second              from @dt); -- 30
select extract(microsecond         from @dt); -- 123456

select extract(year_month          from @dt); -- 200809
select extract(day_hour            from @dt); -- 1007
select extract(day_minute          from @dt); -- 100715
select extract(day_second          from @dt); -- 10071530
select extract(day_microsecond     from @dt); -- 10071530123456
select extract(hour_minute         from @dt); --    715
select extract(hour_second         from @dt); --    71530
select extract(hour_microsecond    from @dt); --    71530123456
select extract(minute_second       from @dt); --      1530
select extract(minute_microsecond  from @dt); --      1530123456
select extract(second_microsecond  from @dt); --        30123456

MySQL Extract() 函數除了沒有date(),time() 的功能外,其餘功能一應具全。而且還具備選取‘day_microsecond’ 等功能。注意這裏不是隻選取 day 和 microsecond,而是從日期的 day 部分一直選取到 microsecond 部分。夠強悍的吧!

MySQL Extract() 函數惟一很差的地方在於:你須要多敲幾回鍵盤。

3. MySQL dayof… 函數:dayofweek(), dayofmonth(), dayofyear()

分別返回日期參數,在一週、一月、一年中的位置。

set @dt = '2008-08-08';

select dayofweek(@dt);   -- 6
select dayofmonth(@dt);  -- 8
select dayofyear(@dt);   -- 221

日期 ‘2008-08-08′ 是一週中的第 6 天(1 = Sunday, 2 = Monday, …, 7 = Saturday);一月中的第 8 天;一年中的第 221 天。

4. MySQL week… 函數:week(), weekofyear(), dayofweek(), weekday(), yearweek()

set @dt = '2008-08-08';

select week(@dt);        -- 31
select week( @dt ,3);      -- 32
select weekofyear(@dt);  -- 32

select dayofweek(@dt);   -- 6
select weekday(@dt);     -- 4

select yearweek(@dt);    -- 200831

MySQL week() 函數,能夠有兩個參數,具體可看手冊。 weekofyear() 和 week() 同樣,都是計算「某天」是位於一年中的第幾周。 weekofyear(@dt) 等價於 week( @dt ,3)。

MySQL weekday() 函數和 dayofweek() 相似,都是返回「某天」在一週中的位置。不一樣點在於參考的標準, weekday:(0 = Monday, 1 = Tuesday, …, 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday, …, 7 = Saturday)

MySQL yearweek() 函數,返回 year(2008) + week 位置(31)。

5. MySQL 返回星期和月份名稱函數:dayname(), monthname()

set @dt = '2008-08-08';

select dayname(@dt);     -- Friday
select monthname(@dt);   -- August

思考,如何返回中文的名稱呢?

6. MySQL last_day() 函數:返回月份中的最後一天。

select last_day('2008-02-01');  -- 2008-02-29
select last_day('2008-08-08');  -- 2008-08-31

MySQL last_day() 函數很是有用,好比我想獲得當前月份中有多少天,能夠這樣來計算:

mysql> select now(), day(last_day(now())) as days;

+---------------------+------+
| now()               | days |
+---------------------+------+
| 2008-08-09 11:45:45 |   31 |
+---------------------+------+
相關文章
相關標籤/搜索