日期计算
来源:互联网 发布:美国电话号码格式 知乎 编辑:程序博客网 时间:2024/06/05 02:12
MySQL提供了几个函数,可以用来计算日期,例如,计算年龄或提取日期部分。
要想确定每个宠物有多大,可以计算当前日期的年和出生日期之间的差。如果当前日期的日历年(MM-DD)比出生日期早(不满周岁),则减去一年。以下查询显示了每个宠物的出生日期、当前日期和年龄。
mysql> SELECT name, birth, CURDATE(),
+----------+------------+------------+------+
|name
+----------+------------+------------+------+
| Fluffy
| Claws
| Buffy
|Fang
| Bowser
| Chirpy
| Whistler | 1997-12-09 | 2003-08-19|
|Slim
| Puffball | 1999-03-30 | 2003-08-19|
+----------+------------+------------+------+
此处,YEAR()提取日期的年部分,RIGHT()提取日期的日历年(MM-DD,最右面5个字符)部分。比较MM-DD值的表达式部分的值一般为1或0,如果CURDATE()的年比birth的年早,则年份应减去1。使用alias(age)来使输出的列标记更有意义。
如果以某个顺序排列行,则能更容易地浏览结果。添加ORDER BY name子句按照名字对输出进行排序则能够实现。
mysql> SELECT name, birth, CURDATE(),
+----------+------------+------------+------+
|name
+----------+------------+------------+------+
| Bowser
| Buffy
| Chirpy
| Claws
|Fang
| Fluffy
| Puffball | 1999-03-30 | 2003-08-19|
|Slim
| Whistler | 1997-12-09 | 2003-08-19|
+----------+------------+------------+------+
为了按age而非name排序输出,只要再使用一个ORDER BY子句:
mysql> SELECT name, birth, CURDATE(),
+----------+------------+------------+------+
|name
+----------+------------+------------+------+
| Chirpy
| Puffball | 1999-03-30 | 2003-08-19|
| Whistler | 1997-12-09 | 2003-08-19|
|Slim
| Claws
| Fluffy
|Fang
| Bowser
| Buffy
+----------+------------+------------+------+
可以使用一个类似的查询来确定已经死亡动物的死亡年龄。你通过检查death值是否是NULL来确定是哪些动物,然后,对于那些非NULL值的动物,需要计算出death和birth值之间的差:
mysql> SELECT name, birth, death,
+--------+------------+------------+------+
| name
+--------+------------+------------+------+
| Bowser | 1989-08-31 | 1995-07-29|
+--------+------------+------------+------+
查询使用death IS NOT NULL而非death !=NULL,因为NULL是特殊的值,不能使用普通比较符来比较,以后会给出解释。参见3.3.4.6节,“NULL值操作”。
如果你想要知道哪个动物下个月过生日,怎么办?对于这类计算,年和天是无关的,你只需要提取birth列的月份部分。MySQL提供几个日期部分的提取函数,例如YEAR()、MONTH()和DAYOFMONTH()。在这里MONTH()是适合的函数。为了看它怎样工作,运行一个简单的查询,显示birth和MONTH(birth)的值:
mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
|name
+----------+------------+--------------+
| Fluffy
| Claws