0
点赞
收藏
分享

微信扫一扫

MySQL日期 专题

一、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)

MySQL日期 专题_mysql


这些日期时间函数,都等同于 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()          |

+---------------------+----------+---------------------+

| 2016-08-08 22:28:41 |        0 | 2016-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

SELECT * from test_class
WHERE class_id !=#{classId}
<![CDATA[
and lesson_end<=CURDATE()
]]>
ORDER BY id DESC

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 时间在业务涉及多个国家和地区的时候,非常有用。 

如何采用​​MySQL​​内置函数获取指定时间之前的日期呢?

SELECT DATE(createTime) date型
SELECT DATE_FORMAT(createTime, '%Y-%m-%d') varchar类型

 

下面的一大堆相关介绍,在网上复制过来的:

 mySQL中常用日期时间函数:

select something from table_name where DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col; 获取30天前的日期。

select date_sub(now(),interval 1 year); 获取一年前的今天的日期
select date_sub(now(),interval 1 week); 获取一周前的日期
select date_sub(now(),interval 1 month); 获取一个月前的日期

date_sub()函数:

DATE_SUB(date,INTERVAL expr type)

MySQL日期 专题_MySQL_02

SELECT NOW(),DATE_SUB(NOW(),INTERVAL 1 HOUR) as the_time

MySQL日期 专题_MySQL_03

select * from xxx where create_time > DATE_SUB(NOW(),INTERVAL 1 HOUR);

 

 

DATE_FORMAT(date,format)

DATE_FORMAT(date,format)

date 参数是合法的日期。format 规定日期/时间的输出格式。

可以使用的格式有:

格式

描述

%a

缩写星期名

%b

缩写月名

%c

月,数值

%D

带有英文前缀的月中的天

%d

月的天,数值(00-31)

%e

月的天,数值(0-31)

%f

微秒

%H

小时 (00-23)

%h

小时 (01-12)

%I

小时 (01-12)

%i

分钟,数值(00-59)

%j

年的天 (001-366)

%k

小时 (0-23)

%l

小时 (1-12)

%M

月名

%m

月,数值(00-12)

%p

AM 或 PM

%r

时间,12-小时(hh:mm:ss AM 或 PM)

%S

秒(00-59)

%s

秒(00-59)

%T

时间, 24-小时 (hh:mm:ss)

%U

周 (00-53) 星期日是一周的第一天

%u

周 (00-53) 星期一是一周的第一天

%V

周 (01-53) 星期日是一周的第一天,与 %X 使用

%v

周 (01-53) 星期一是一周的第一天,与 %x 使用

%W

星期名

%w

周的天 (0=星期日, 6=星期六)

%X

年,其中的星期日是周的第一天,4 位,与 %V 使用

%x

年,其中的星期一是周的第一天,4 位,与 %v 使用

%Y

年,4 位

%y

年,2 位

实例

下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

 

结果类似:

Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

select UNIX_TIMESTAMP('2011-05-31 23:59:59');
select from_unixtime(1306771200);

 

SELECT NOW();
select from_unixtime(1399537700);
select UNIX_TIMESTAMP(NOW()) * 1000;

SELECT
begin_time,
date_format(
from_unixtime((begin_time / 1000)),
'%Y-%m-%d'
),
date_format(
from_unixtime((begin_time / 1000)),
'%Y-%m-%d %T:%f'
)
FROM
tb_test

MySQL日期 专题_日期时间_04


**需要注意的是select UNIX_TIMESTAMP(NOW()) 输出的是,java中System.currentTimeMillis()输出的是毫秒,需要先除以1000再使用mysql的函数

mysql与日期相关的函数:

下面的查询选择了所有记录,其date_col的值是在最后30天以内:

mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col)<= 30;

DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK('1998-02-03');
-> 3

WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
mysql> select WEEKDAY('1997-11-05');
-> 2

DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。
mysql> select DAYOFMONTH('1998-02-03');
-> 3

DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。
mysql> select DAYOFYEAR('1998-02-03');
-> 34

MONTH(date)
返回date的月份,范围1到12。
mysql> select MONTH('1998-02-03');
-> 2

DAYNAME(date)
返回date的星期名字。
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'

MONTHNAME(date)
返回date的月份名字。
mysql> select MONTHNAME("1998-02-05");
-> 'February'

QUARTER(date)
返回date一年中的季度,范围1到4。
mysql> select QUARTER('98-04-01');
-> 2

WEEK(date)  
WEEK(date,first)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。

mysql> select WEEK('1998-02-20');
-> 7
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8

YEAR(date)
返回date的年份,范围在1000到9999。
mysql> select YEAR('98-02-03');
-> 1998

HOUR(time)
返回time的小时,范围是0到23。
mysql> select HOUR('10:05:03');
-> 10

MINUTE(time)
返回time的分钟,范围是0到59。
mysql> select MINUTE('98-02-03 10:05:03');
-> 5

SECOND(time)
回来time的秒数,范围是0到59。
mysql> select SECOND('10:05:03');
-> 3

举报

相关推荐

0 条评论