MySQL日期函数

对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。  
这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:  
mysql> SELECT something FROM table PHPChina
开源社区门户 Q;P q A7c7S / ~
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;  
DAYOFWEEK(date) PHPChina
开源社区门户 { R h m"a-b6n
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
3e Y3r Y h0mysql> select DAYOFWEEK('1998-02-03');
D P p0W l T:v N { U v0-> 3  
WEEKDAY(date) PHPChina
开源社区门户 p(J6w D l6} ^&p#r D
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)
~1b g&h+q U e7O P,m s G- 0mysql> select WEEKDAY('1997-10-04 22:23:00');
0D [ [,v*~6{ E D A0-> 5 PHPChina
开源社区门户0^(e J'T4W3]
mysql> select WEEKDAY('1997-11-05'); PHPChina
开源社区门户 A o8N ` Y1@ j5V.g
-> 2  
DAYOFMONTH(date) PHPChina
开源社区门户.[ S s u A*])T g4t
返回date的月份中日期,在131范围内。
/ P T:K8j!b,` I0mysql> select DAYOFMONTH('1998-02-03'); PHPChina
开源社区门户!O1x o o R'T {
-> 3  
DAYOFYEAR(date) PHPChina
开源社区门户 ` u:_ }6{ o o
返回date在一年中的日数, 1366范围内。
m ~* R L$B Z2O0mysql> select DAYOFYEAR('1998-02-03');
d ]0f D$r m s G0-> 34  
MONTH(date) PHPChina
开源社区门户3^(z /5u p D u P1v
返回date的月份,范围112
(r9{$` r A F z;e0mysql> select MONTH('1998-02-03'); PHPChina
开源社区门户 X O8c z"@/~ E u
-> 2  
DAYNAME(date)
x6v!V X%w6s [ q @ H0
返回date的星期名字。 PHPChina 开源社区门户0[4}#_ C G B8w
mysql> select DAYNAME("1998-02-05"); PHPChina
开源社区门户 h | J)D W*] l f
-> 'Thursday'  
MONTHNAME(date)
8Q y I k1m t q!y /0
返回date的月份名字。 PHPChina 开源社区门户,]y#l C l0d$h ^
mysql> select MONTHNAME("1998-02-05");
^:L:W J /0-> 'February'  
QUARTER(date) PHPChina
开源社区门户 `&Z.n7r9E
返回date一年中的季度,范围14 PHPChina 开源社区门户 _ [ | B @:v _
mysql> select QUARTER('98-04-01');
%p ] J [ a/o a0R*^!t'C0-> 2  
WEEK(date)
_4x P M"m [ i0
 
_9c h*W o b ~+Q0WEEK(date,first) PHPChina
开源社区门户 T R |4G n A$~
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0522个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。 PHPChina 开源社区门户 N7`;F"s4R4`9H x
mysql> select WEEK('1998-02-20');
k8[ x+|-d X T q0-> 7 PHPChina
开源社区门户 v:@ D }%] i j @
mysql> select WEEK('1998-02-20',0);
v ]$c8a6S+]0-> 7 PHPChina
开源社区门户 m ] l:z _ i
mysql> select WEEK('1998-02-20',1);
v b S+Q1W&H)j+t0-> 8  
YEAR(date) PHPChina
开源社区门户'[1a8_ eE r /
返回date的年份,范围在10009999
"o F,m `/C u b `!|0mysql> select YEAR('98-02-03');
t O$R { f ^ T c7J0-> 1998  
HOUR(time) PHPChina
开源社区门户 p,K$S+t Z z'f / S;p
返回time的小时,范围是023 PHPChina 开源社区门户 p+V Q"| c'P
mysql> select HOUR('10:05:03'); PHPChina
开源社区门户3z)q w K k;C B
-> 10  
MINUTE(time)
#G ~ { F n0
返回time的分钟,范围是059 PHPChina 开源社区门户4}3u)`&x k b/b d!n
mysql> select MINUTE('98-02-03 10:05:03');
p L }'S+F%^ z0-> 5  
SECOND(time) PHPChina
开源社区门户 } [1w'{ ] R$_ b
回来time的秒数,范围是059 PHPChina 开源社区门户'O Y.|#v$c
mysql> select SECOND('10:05:03'); PHPChina
开源社区门户 H"f G"n0m
-> 3  
PERIOD_ADD(P,N)
.m.p r i ^1Z(D P.q k F P0
增加N个月到阶段P(以格式YYMMYYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。 PHPChina 开源社区门户$m6{ f7G1q M j
mysql> select PERIOD_ADD(9801,2);
1I+o m)i z S v0-> 199803  
PERIOD_DIFF(P1,P2) PHPChina
开源社区门户9m7a*N E R |"J f J5 Q
返回在时期P1P2之间月数,P1P2应该以格式YYMMYYYYMM。注意,时期参数P1P2不是日期值。 PHPChina 开源社区门户 u F#Y3m/r R*K5~
mysql> select PERIOD_DIFF(9802,199703);
y$y B E B4A:p L _7Q0-> 11  
DATE_ADD(date,INTERVAL expr type) PHPChina
开源社区门户 J#v,k ` R 5G K
 
4M J(Z /6W/p(M a O0DATE_SUB(date,INTERVAL expr type)
)n-[!A/x E$g8~0
 
%J1G9W!` D M/Y4}5/ S0ADDDATE(date,INTERVAL expr type)
L } _9L o4H0
  PHPChina 开源社区门户+} .L _6F)|;c J
SUBDATE(date,INTERVAL expr type) PHPChina
开源社区门户 R R-Q ^ Q w
这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()SUBDATE()DATE_ADD()DATE_SUB()的同义词。PHPChina 开源社区门户 l F-m L T
MySQL 3.23中,你可以使用+-而不是DATE_ADD()DATE_SUB()。(见例子)date是一个指定开始日期的PHPChina 开源社区门户 e J F7X B w. 4Q
DATETIME
DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以
y x6s Y8d#]-@,q A0
一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期PHPChina 开源社区门户 k|:a _ c L0l P
中返回“type”间隔。下表显示了typeexpr参数怎样被关联: type值含义 期望的expr格式 PHPChina 开源社区门户 k(/ z F {
SECOND
SECONDS PHPChina 开源社区门户 C m g"i6U n3["u `
MINUTE
分钟 MINUTES
D o*| w(Z5r'R0HOUR
时间 HOURS PHPChina 开源社区门户 p p(W N |
DAY
DAYS PHPChina 开源社区门户 Q%H }5e O
MONTH
MONTHS PHPChina 开源社区门户 g [ c t A/n
YEAR
YEARS PHPChina 开源社区门户 a O.Q/H _*S0v9S*z
MINUTE_SECOND
分钟和秒 "MINUTES:SECONDS"
b {(c-g |0A$ 5p0HOUR_MINUTE
小时和分钟 "HOURS:MINUTES"
.Q B i0X2y0DAY_HOUR
天和小时 "DAYS HOURS"
%@ A9d)x _'G c t6` G0YEAR_MONTH
年和月 "YEARS-MONTHS"
N/N a {-S d0HOUR_SECOND
小时, 分钟, "HOURS:MINUTES:SECONDS"
c:Y9T |4N M0DAY_MINUTE
, 小时, 分钟 "DAYS HOURS:MINUTES" PHPChina 开源社区门户 G [ h F e$f
DAY_SECOND
, 小时, 分钟, "DAYS HOURS:MINUTES:SECONDS"  
MySQL
expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅包含YEARMONTHDAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。  
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; PHPChina
开源社区门户5/4l J d ` x h
-> 1998-01-01 00:00:00 PHPChina
开源社区门户6j#v ~:j }~
mysql> SELECT INTERVAL 1 DAY + "1997-12-31"; PHPChina
开源社区门户2J j {3v L
-> 1998-01-01
Q4[3D6i Q e k6x.t0mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; PHPChina
开源社区门户 |5Q q dL V F
-> 1997-12-31 23:59:59
6e!i q a I"a s |0mysql> SELECT DATE_ADD("1997-12-31 23:59:59", PHPChina
开源社区门户 d&l b/W i
INTERVAL 1 SECOND);
3s Q [ E-L*O j T.l0-> 1998-01-01 00:00:00
tB E G I N j5x0mysql> SELECT DATE_ADD("1997-12-31 23:59:59", PHPChina
开源社区门户G b4/7} u
INTERVAL 1 DAY); PHPChina
开源社区门户#g;l&F e h9P
-> 1998-01-01 23:59:59
$T R X,o5E&S z c ] V0mysql> SELECT DATE_ADD("1997-12-31 23:59:59", PHPChina
开源社区门户 _ @ { h Q B'Q%/ V(}8T
INTERVAL "1:1" MINUTE_SECOND); PHPChina
开源社区门户;/9H3F+g y Y q7L N
-> 1998-01-01 00:01:00 PHPChina
开源社区门户"Q L M)D0X ` l
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
9t;~.w h&} H Z0INTERVAL "1 1:1:1" DAY_SECOND);
'a'z2N J J l u+V w i0-> 1997-12-30 22:58:59
5B2V I o r |0mysql> SELECT DATE_ADD("1998-01-01 00:00:00", PHPChina
开源社区门户*^:y j8_1e"L(W H.[
INTERVAL "-1 10" DAY_HOUR);
R:U"g / i6a z H3S0-> 1997-12-30 14:00:00 PHPChina
开源社区门户5z9z#r+h C m
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
p,f9^A J N C%W P R0-> 1997-12-02 PHPChina
开源社区门户 r w @/x B D/b c
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
U H d v9}'T r j0-> 1999
} Z5k / m ]0mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); PHPChina
开源社区门户 | f m D q H ` ~0G L
-> 199907 PHPChina
开源社区门户"L Y m"B y-t n h
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
/'d2} x K$T0-> 20102  
如果你指定太短的间隔值(不包括type关键词期望的间隔部分)MySQL假设你省掉了间隔值的最左面部分。例如,如果你指定一个typeDAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,结果是NULL。如果你增加MONTHYEAR_MONTHYEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。  
mysql> select DATE_ADD('1998-01-30', Interval 1 month); PHPChina
开源社区门户 a ^ F4Q r U&b S
-> 1998-02-28  
注意,从前面的例子中词INTERVALtype关键词不是区分大小写的。 PHPChina 开源社区门户 E2P F y q z

[ x6X)[ A6@ [4J o0TO_DAYS(date) PHPChina
开源社区门户 T8b i$^ z/e e-w n
给出一个日期date,返回一个天数(0年的天数)
M B w S /*E)A5Z c0mysql> select TO_DAYS(950501); PHPChina
开源社区门户 {8] ~5K Y(|.B(E
-> 728779 PHPChina
开源社区门户 x([ } o f { w ^
mysql> select TO_DAYS('1997-10-07');
,S b s7K /9g:N0-> 729669  
TO_DAYS()PHPChina
开源社区门户7 u d'I9t y x
不打算用于使用格列高里历(1582)出现前的值。  
FROM_DAYS(N)
B%s C w z7/ Z0
给出一个天数N,返回一个DATE值。
n b0R+J y0mysql> select FROM_DAYS(729669);
Q8z u F+g J B %A0-> '1997-10-07'  
DATE_FORMAT(date,format) PHPChina
开源社区门户+D ` y q w&n
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December) PHPChina 开源社区门户 / H'g"v&i
%W
星期名字(Sunday……Saturday)
.U*H:K e%p ~ /0a:w _#V0%D
英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
:N2g v j ~ p l,c0%Y
, 数字, 4
p)] c;p p A v-@0%y
, 数字, 2
] y s Y /5v {0%a
缩写的星期名字(Sun……Sat) PHPChina 开源社区门户#v J&r l z A)D u6K
%d
月份中的天数, 数字(00……31) PHPChina 开源社区门户&n J ](d7d- ,[ q0W
%e
月份中的天数, 数字(0……31) PHPChina 开源社区门户$F0P q1{.Y W
%m
, 数字(01……12)
:g z#_ H5[ n I0%c
, 数字(1……12)
} k-D%e'u E y m G q+h0%b
缩写的月份名字(Jan……Dec) PHPChina 开源社区门户*B0w @ e W8`
%j
一年中的天数(001……366) PHPChina 开源社区门户!c y$v0[$` v
%H
小时(00……23) PHPChina 开源社区门户 a&^,W k P$K I(y6~
%k
小时(0……23)
.[;r n1v1@9W0%h
小时(01……12)
} a!s7G#R o _0S n9H0I C0%I
小时(01……12)
5LT e0_!@ M S v K*t0%l
小时(1……12) PHPChina 开源社区门户"t5X w R$/ i ^ E'v
%i
分钟, 数字(00……59) PHPChina 开源社区门户 W&| a P S4r h |
%r
时间,12 小时(hh:mm:ss [AP]M)
_ ]| } k*J z } ^"M0%T
时间,24 小时(hh:mm:ss)
S'U(z c p0%S
(00……59)
f9x;o | / G0%s
(00……59)
4t(n0Y%F/Q j U {0%p AM
PM PHPChina 开源社区门户!r#/ } r j R.O;p
%w
一个星期中的天数(0=Sunday ……6=Saturday
F V3K"@ M q y/X0%U
星期(0……52), 这里星期天是星期的第一天 PHPChina 开源社区门户 F$O7` e q"l
%u
星期(0……52), 这里星期一是星期的第一天
+H /5G%k.T } g4X$ 2u#]0%%
一个文字“%”  
所有的其他字符不做解释被复制到结果中。  
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
n `1y } r#U n&~9N0-> 'Saturday October 1997'
g `1CU'|:b0mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
Q G7z,V#V ~/R'N0-> '22:23:00'
1Z a*^ z8X A)R"P0mysql> select DATE_FORMAT('1997-10-04 22:23:00',
)o%X J&P3|-S( @.P Y b0'%D %y %a %d %m %b %j');
p'g l"{ i0-> '4th 97 Sat 04 10 Oct 277'
3A n ` z*| { Q X0mysql> select DATE_FORMAT('1997-10-04 22:23:00', PHPChina
开源社区门户 ^ w L z%p f S
'%H %k %I %r %T %S %w');
$L [4a8X L i z X k0-> '22 22 10 10:23:00 PM 22:23:00 00 6'
'V:N a H S)I0MySQL3.23
中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。  
TIME_FORMAT(time,format)
Q `!Z B B P5t I:t0
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。其他修饰符产生一个NULL值或0 PHPChina 开源社区门户 k W D:E9R S p G*J u

(@ `(n v k8wJ'N k f y0CURDATE() PHPChina
开源社区门户%i7^ W"g `;F a8X z L ] g
  PHPChina 开源社区门户)W3i c j*e
CURRENT_DATE
4k s,d,h U C7c a0
'YYYY-MM-DD'YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。 PHPChina 开源社区门户 P'| l9^ s c%a lg T
mysql> select CURDATE();
+r q w w3x0-> '1997-12-15'
~4i3o2W/V0mysql> select CURDATE() + 0;
*|8` O y,U6O)Q f0-> 19971215  
CURTIME() PHPChina
开源社区门户 r"k9v /0}%o1x {
 
2o O B   1U Z ot0CURRENT_TIME PHPChina
开源社区门户1y I1_$k x
'HH:MM:SS'HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
8k3   R i p-m7e'X r0mysql> select CURTIME();
/:D;A D ~$j k,s#y,I&o0-> '23:50:26'
2k( R4a:P J0mysql> select CURTIME() + 0; PHPChina
开源社区门户 E U V ~ i.e5Z c m h
-> 235026  
NOW() PHPChina
开源社区门户 y X2/ dc    B |
 
#Z k4n3J p9t { k Q;B4g0SYSDATE()
l f }0A | ad'@0
  PHPChina 开源社区门户0_9B / D.y#D0Y
CURRENT_TIMESTAMP PHPChina
开源社区门户(E r D S2};a E,U J
'YYYY-MM-DD HH:MM:SS'YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。 PHPChina 开源社区门户 w C$d x! g$~"q
mysql> select NOW();
B/Q v Z"R f W / 0-> '1997-12-15 23:50:26' PHPChina
开源社区门户.R G r*Y _ [ |!@ l ~
mysql> select NOW() + 0; PHPChina
开源社区门户 v h Q$r z!}1} n
-> 19971215235026  
UNIX_TIMESTAMP() PHPChina
开源社区门户 W9m7F q _$e W h
 
j G+W1{ z F0UNIX_TIMESTAMP(date)
.Y6]/F c p#K7a0
如果没有参数调用,返回一个Unix时间戳记('1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDDYYYYMMDD格式的本地时间的一个数字。 PHPChina 开源社区门户8]&|2N ` |,J$S
mysql> select UNIX_TIMESTAMP();
o B"P.~7E3y G0-> 882226357 PHPChina
开源社区门户 V Z;O&c a'a / ~ V0J y
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'); PHPChina
开源社区门户 p j2[ Q2] X
-> 875996580 PHPChina
开源社区门户4M G n f0} D c:{4S
UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。  
FROM_UNIXTIME(unix_timestamp)
b W4W [ P Q)F B g0
'YYYY-MM-DD HH:MM:SS'YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。 PHPChina 开源社区门户,p9@,Q h4n !R P
mysql> select FROM_UNIXTIME(875996580);
@ l E L I d0-> '1997-10-04 22:23:00'
:c-v Y M(V h @ R y 0mysql> select FROM_UNIXTIME(875996580) + 0;
J [9` u7c D0e0-> 19971004222300  
FROM_UNIXTIME(unix_timestamp,format)
Z W I9P g P j J.X [0
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。 PHPChina 开源社区门户)y k S8i v p
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
:d"k } L x u X0'%Y %D %M %h:%i:%s %x');
|   )/7f D ` G'S)I0-> '1997 23rd December 03:43:30 x'  
SEC_TO_TIME(seconds)
6K E ] T X z f j O'i0
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。 PHPChina 开源社区门户 Y o z n'n.o
mysql> select SEC_TO_TIME(2378); PHPChina
开源社区门户7e)O C r Q W+l `"y3I e+x
-> '00:39:38'
v1}&r;u$x G!g u E0mysql> select SEC_TO_TIME(2378) + 0; PHPChina
开源社区门户 ~%U2H r s Y
-> 3938  
TIME_TO_SEC(time)
L ]"t,@ u d*I#/0
返回time参数,转换成秒。
7g `%O%w n*~*D#m0mysql> select TIME_TO_SEC('22:23:00'); PHPChina
开源社区门户 T9j4| A%R
-> 80580 PHPChina
开源社区门户5Y:O F v B u
mysql> select TIME_TO_SEC('00:39:38');
L8|.I$h O0-> 2378

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值