mysql 日期和时间函数

DjMaper

DjMaper

2016-02-19 09:28

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。
mysql SELECT something FROM tbl_name
WHERE TO_DAYS(NOW()) – TO_DAYS(date_col) = 30;

DAYOFWEEK(date)
返回 date 的星期索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值符合 ODBC 的标准。
mysql SELECT DAYOFWEEK('1998-02-03′);
- 3

WEEKDAY(date)
返回 date 的星期索引(0 = Monday, 1 = Tuesday, … 6 = Sunday):
mysql SELECT WEEKDAY('1998-02-03 22:23:00′);
- 1
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 到 53 (是的,可能有第 53 周的开始)。两个参数形式的 WEEK() 允许你指定一周是否以星期日或星期一开始,以及返回值为 0-53 还是 1-52。这里的一个表显示第二个参数是如何工作的: 值 含义
0 一周以星期日开始,返回值范围为 0-53
1 一周以星期一开始,返回值范围为 0-53
2 一周以星期日开始,返回值范围为 1-53
3 一周以星期一开始,返回值范围为 1-53 (ISO 8601)

mysql SELECT WEEK('1998-02-20′);
- 7
mysql SELECT WEEK('1998-02-20′,0);
- 7
mysql SELECT WEEK('1998-02-20′,1);
- 8
mysql SELECT WEEK('1998-12-31′,1);
- 53

注意,在版本 4.0 中,WEEK(#,0) 被更改为匹配 USA 历法。 注意,如果一周是上一年的最后一周,当你没有使用 2 或 3 做为可选参数时,MySQL 将返回 0:
mysql SELECT YEAR('2000-01-01′), WEEK('2000-01-01′,0);
- 2000, 0
mysql SELECT WEEK('2000-01-01′,2);
- 52

你可能会争辩说,当给定的日期值实际上是 1999 年的第 52 周的一部分时,MySQL 对 WEEK() 函数应该返回 52。我们决定返回 0 ,是因为我们希望该函数返回“在指定年份中是第几周”。当与其它的提取日期值中的月日值的函数结合使用时,这使得 WEEK() 函数的用法可靠。如果你更希望能得到恰当的年-周值,那么你应该使用参数 2 或 3 做为可选参数,或者使用函数 YEARWEEK() :
mysql SELECT YEARWEEK('2000-01-01′);
- 199952
mysql SELECT MID(YEARWEEK('2000-01-01′),5,2);
- 52

YEAR(date)
返回 date 的年份,范围为 1000 到 9999:
mysql SELECT YEAR('98-02-03′);
- 1998

YEARWEEK(date)
YEARWEEK(date,first)
返回一个日期值是的哪一年的哪一周。第二个参数的形式与作用完全与 WEEK() 的第二个参数一致。注意,对于给定的日期参数是一年的第一周或最后一周的,返回的年份值可能与日期参数给出的年份不一致:
mysql SELECT YEARWEEK('1987-01-01′);
- 198653

注意,对于可选参数 0 或 1,周值的返回值不同于 WEEK() 函数所返回值(0), WEEK() 根据给定的年语境返回周值。
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

PERIOD_ADD(P,N)
增加 N 个月到时期 P(格式为 YYMM 或 YYYYMM)中。以 YYYYMM 格式返回值。 注意,期间参数 P 不是 一个日期值:
mysql SELECT PERIOD_ADD(9801,2);
- 199803

PERIOD_DIFF(P1,P2)
返回时期 P1 和 P2 之间的月数。P1 和 P2 应该以 YYMM 或 YYYYMM 指定。 注意,时期参数 P1 和 P2 不是 日期值:
mysql SELECT PERIOD_DIFF(9802,199703);
- 11

DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
这些函数执行日期的算术运算。ADDDATE() 和 SUBDATE() 分别是 DATE_ADD() 和 DATE_SUB() 的同义词。 在 MySQL 3.23 中,如果表达式的右边是一个日期值或一个日期时间型字段,你可以使用 + 和 – 代替 DATE_ADD() 和 DATE_SUB()(示例如下)。 参数 date 是一个 DATETIME 或 DATE 值,指定一个日期的开始。expr 是一个表达式,指定从开始日期上增加还是减去间隔值。expr 是一个字符串;它可以以一个 “-” 领头表示一个负的间隔值。type 是一个关键词,它标志着表达式以何格式被解释。 下表显示 type 和 expr 参数是如何关联的: type 值 expr 期望的格式
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
MONTH MONTHS
YEAR YEARS
MINUTE_SECOND “MINUTES:SECONDS”
HOUR_MINUTE “HOURS:MINUTES”
DAY_HOUR “DAYS HOURS”
YEAR_MONTH “YEARS-MONTHS”
HOUR_SECOND “HOURS:MINUTES:SECONDS”
DAY_MINUTE “DAYS HOURS:MINUTES”
DAY_SECOND “DAYS HOURS:MINUTES:SECONDS”
在 expr 的格式中,MySQL 允许任何字符作为定界符。表中所显示的是建议的定界字符。如果 date 参数是一个 DATE 值,并且计算的间隔仅仅有 YEAR、MONTH 和 DAY 部分(没有时间部分),那么返回值也是一个 DATE 值。否则返回值是一个 DATETIME 值:
mysql SELECT “1997-12-31 23:59:59″ + INTERVAL 1 SECOND;
- 1998-01-01 00:00:00
mysql SELECT INTERVAL 1 DAY + “1997-12-31″;
- 1998-01-01
mysql SELECT “1998-01-01″ – INTERVAL 1 SECOND;
- 1997-12-31 23:59:59
mysql SELECT DATE_ADD(”1997-12-31 23:59:59″,
- INTERVAL 1 SECOND);
- 1998-01-01 00:00:00
mysql SELECT DATE_ADD(”1997-12-31 23:59:59″,
- INTERVAL 1 DAY);
- 1998-01-01 23:59:59
mysql SELECT DATE_ADD(”1997-12-31 23:59:59″,
- INTERVAL “1:1″ MINUTE_SECOND);
- 1998-01-01 00:01:00
mysql SELECT DATE_SUB(”1998-01-01 00:00:00″,
- INTERVAL “1 1:1:1″ DAY_SECOND);
- 1997-12-30 22:58:59
mysql SELECT DATE_ADD(”1998-01-01 00:00:00″,
- INTERVAL “-1 10″ DAY_HOUR);
- 1997-12-30 14:00:00
mysql SELECT DATE_SUB(”1998-01-02″, INTERVAL 31 DAY);
- 1997-12-02

如果你指定了一个太短的间隔值(没有包括 type 关键词所期望的所有间隔部分),MySQL 假设你遗漏了间隔值的最左边部分。例如,如果指定一个 type 为 DAY_SECOND,那么 expr 值被期望包含天、小时、分钟和秒部分。如果你象 “1:10″ 样指定一个值,MySQL 假设天和小时部分被遗漏了,指定的值代表分钟和秒。换句话说,”1:10″ DAY_SECOND 被解释为等价于 “1:10″ MINUTE_SECOND。这类似于 MySQL 解释 TIME 值为经过的时间而不是一天的时刻。注意,如果依着包含一个时间部分的间隔增加或减少一个日期值,该日期值将被自动地转换到一个日期时间值:

mysql SELECT DATE_ADD(”1999-01-01″, INTERVAL 1 DAY);
- 1999-01-02
mysql SELECT DATE_ADD(”1999-01-01″, INTERVAL 1 HOUR);
- 1999-01-01 01:00:00

如果你使用了确定不正确的日期,返回结果将是 NULL。如果你增加 MONTH、YEAR_MONTH 或 YEAR,并且结果日期的天比新月份的最大天数还大,那么它将被调整到新月份的最大天数:
mysql SELECT DATE_ADD('1998-01-30′, INTERVAL 1 MONTH);
- 1998-02-28

注意,上面的例子中,单词 INTERVAL 和关键词 type 是不区分字母大小写的。

EXTRACT(type FROM date)
EXTRACT() 函数使用与 DATE_ADD() 或 DATE_SUB() 一致的间隔类型,但是它用于指定从日期中提取的部分,而不是进行日期算术运算。
mysql SELECT EXTRACT(YEAR FROM “1999-07-02″);
- 1999
mysql SELECT EXTRACT(YEAR_MONTH FROM “1999-07-02 01:02:03″);
- 199907
mysql SELECT EXTRACT(DAY_MINUTE FROM “1999-07-02 01:02:03″);
- 20102

TO_DAYS(date)
给出一个日期 date,返回一个天数(从 0 年开始的天数):
mysql SELECT TO_DAYS(950501);
- 728779
mysql SELECT TO_DAYS('1997-10-07′);
- 729669

TO_DAYS() 无意于使用先于格里高里历法(即现行的阳历)(1582)出现的值,因为它不考虑当历法改变时所遗失的天数。

FROM_DAYS(N)
给出一个天数 N,返回一个 DATE 值:
mysql SELECT FROM_DAYS(729669);
- ‘1997-10-07′

FROM_DAYS() 无意于使用先于格里高里历法(1582)出现的值,因为它不考虑当历法改变时所遗失的天数。

DATE_FORMAT(date,format)
依照 format 字符串格式化 date 值。下面的修饰符可被用于 format 字符串中: 修饰符 含义
%M 月的名字 (January..December)
%W 星期的名字 (Sunday..Saturday)
%D 有英文后缀的某月的第几天 (0th, 1st, 2nd, 3rd, etc.)
%Y 年份,数字的,4 位
%y 年份,数字的,2 位
%X 周值的年份,星期日是一个星期的第一天,数字的,4 位,与 ‘%V' 一同使用
%x 周值的年份,星期一是一个星期的第一天,数字的,4 位,与 ‘%v' 一同使用
%a 缩写的星期名 (Sun..Sat)
%d 月份中的天数,数字的 (00..31)
%e 月份中的天数,数字的 (0..31)
%m 月,数字的 (00..12)
%c 月,数字的 (0..12)
%b 缩写的月份名 (Jan..Dec)
%j 一年中的天数 (001..366)
%H 小时 (00..23)
%k 小时 (0..23)
%h 小时 (01..12)
%I 小时 (01..12)
%l 小时 (1..12)
%i 分钟,数字的 (00..59)
%r 时间,12 小时 (hh:mm:ss [AP]M)
%T 时间,24 小时 (hh:mm:ss)
%S 秒 (00..59)
%s 秒 (00..59)
%p AM 或 PM
%w 一周中的天数 (0=Sunday..6=Saturday)
%U 星期 (00..53),星期日是一个星期的第一天
%u 星期 (00..53),星期一是一个星期的第一天
%V 星期 (01..53),星期日是一个星期的第一天。与 ‘%X' 一起使用
%v 星期 (01..53),星期一是一个星期的第一天。与 ‘%x' 一起使用
%% 一个字母 “%”
所有其它的字符不经过解释,直接复制到结果中:
mysql SELECT DATE_FORMAT('1997-10-04 22:23:00′, ‘%W %M %Y');
- ‘Saturday October 1997′
mysql SELECT DATE_FORMAT('1997-10-04 22:23:00′, ‘%H:%i:%s');
- ‘22:23:00′
mysql SELECT DATE_FORMAT('1997-10-04 22:23:00′,
‘%D %y %a %d %m %b %j');
- ‘4th 97 Sat 04 10 Oct 277′
mysql SELECT DATE_FORMAT('1997-10-04 22:23:00′,
‘%H %k %I %r %T %S %w');
- ‘22 22 10 10:23:00 PM 22:23:00 00 6′

mysql SELECT DATE_FORMAT('1999-01-01′, ‘%X %V');
- ‘1998 52′

在 MySQL 3.23 中,在格式修饰符前需要字符 `%'。在更早的 MySQL 版本中,`%' 是可选的。 月份与天修饰符的范围从零开始的原因是,在 MySQL 3.23 中,它允许存储不完善的日期值(例如 ‘2004-00-00′)。

TIME_FORMAT(time,format)
它的使用方法与上面的 DATE_FORMAT() 函数相似,但是 format 字符串只包含处理小时、分和秒的那些格式修饰符。使用其它的修饰符会产生一个 NULL 值或 0。

CURDATE()
CURRENT_DATE
以 ‘YYYY-MM-DD' 或 YYYYMMDD 格式返回当前的日期值,返回的格式取决于该函数是用于字符串还是数字语境中:
mysql SELECT CURDATE();
- ‘1997-12-15′
mysql SELECT CURDATE() + 0;
- 19971215

CURTIME()
CURRENT_TIME
以 ‘HH:MM:SS' 或 HHMMSS 格式返回当前的时间值,返回的格式取决于该函数是用于字符串还是数字语境中:
mysql SELECT CURTIME();
- ‘23:50:26′
mysql SELECT CURTIME() + 0;
- 235026

NOW()
SYSDATE()
CURRENT_TIMESTAMP
以 ‘YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格式返回当前的日期时间值,返回的格式取决于该函数是用于字符串还是数字语境中:
mysql SELECT NOW();
- ‘1997-12-15 23:50:26′
mysql SELECT NOW() + 0;
- 19971215235026

注意,函数 NOW() 在每个查询中只计算一次,也就是在查询开始执行时。这就是说,如果在一个单独的查询中多次引用了 NOW(),它只会给出值都是一个相同的时间。

UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果调用时没有参数,以无符号的整数形式返回一个 Unix 时间戳(从 ‘1970-01-01 00:00:00′ GMT 开始的秒数)。如果以一个参数 date 调用 UNIX_TIMESTAMP(),它将返回该参数值从 ‘1970-01-01 00:00:00′ GMT 开始经过的秒数值。date 可以是一个 DATE 字符串,一个 DATETIME 字符串,一个 TIMESTAMP,或者以一个 YYMMDD 或 YYYYMMDD 显示的本地时间:
mysql SELECT UNIX_TIMESTAMP();
- 882226357
mysql SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00′);
- 875996580

当 UNIX_TIMESTAMP 被用于一个 TIMESTAMP 列时,函数直接返回一个内部的时间戳值,而不进行一个隐含地 “string-to-unix-timestamp” 转换。如果你传递一个超出范围的日期参数给 UNIX_TIMESTAMP() ,它将返回 0,但是请注意,MySQL 对其仅仅进行基本的检验(年范围 1970-2037,月份 01-12,日期 01-31)。 如果你希望减去 UNIX_TIMESTAMP() 列,你应该需要将结果强制转换为一有符号整数。查看章节 6.3.5 Cast 函数。

FROM_UNIXTIME(unix_timestamp [,format])
以 ‘YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格式返回一个 unix_timestamp 参数值,返回值的形式取决于该函数使用于字符串还是数字语境。 如果 format 给出,返回值依 format 字符串被格式。format 可以包含与 DATE_FORMAT() 函数同样的修饰符。
mysql SELECT FROM_UNIXTIME(875996580);
- ‘1997-10-04 22:23:00′
mysql SELECT FROM_UNIXTIME(875996580) + 0;
- 19971004222300
mysql SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
‘%Y %D %M %h:%i:%s %x');
- ‘1997 23rd December 03:43:30 1997′

SEC_TO_TIME(seconds)
以 ‘HH:MM:SS' 或 HHMMSS 格式返回参数 seconds 被转换到时分秒后的值,返回值的形式取决于该函数使用于字符串还是数字语境:
mysql SELECT SEC_TO_TIME(2378);
- ‘00:39:38′
mysql SELECT SEC_TO_TIME(2378) + 0;
- 3938

TIME_TO_SEC(time)
将参数 time 转换为秒数后返回:
mysql SELECT TIME_TO_SEC('22:23:00′);
- 80580
mysql SELECT TIME_TO_SEC('00:39:38′);
- 2378
展开更多 50%)
分享

猜你喜欢

mysql 日期和时间函数

编程语言 网络编程
mysql 日期和时间函数

mysql的日期和时间函数

MySQL mysql数据库
mysql的日期和时间函数

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Mysql日期和时间函数不求人

MySQL mysql数据库
Mysql日期和时间函数不求人

Excel日期和时间函数

excel
Excel日期和时间函数

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Excel函数详解日期和时间函数

电脑入门
Excel函数详解日期和时间函数

ASP日期和时间函数示例

Web开发
ASP日期和时间函数示例

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

计算黄金分割的javascript代码

计算黄金分割的javascript代码

优化网页之快速的呈现我们的网页

优化网页之快速的呈现我们的网页
下拉加载更多内容 ↓