这是MySql5.1参考手册上的一个例子:表这这样的,表名为pet。
+----------+--------+---------+------+------------+------------+
| name     | owner  | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | f    | 1993-02-04 | NULL       |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | NULL       |
| Buffy    | Harold | dog     | f    | 1989-05-13 | NULL       |
| Fang     | Benny  | dog     | m    | 1990-08-27 | NULL       |
| Bowser   | Diane  | dog     | m    | 1979-08-31 | 1995-07-29 |
| Chirpy   | Gwen   | bird    | f    | 1998-09-11 | NULL       |
| Whistler | Gwen   | bird    | NULL | 1997-12-09 | NULL       |
| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL       |
| Puffball | Diane  | hamster | f    | 1999-03-30 | NULL       |
+----------+--------+---------+------+------------+------------+
执行下面的语句:
mysql> SELECT name, birth, CURDATE(),    
    -> (YEAR(CURDATE())-YEAR(birth))    
    -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))    
    -> AS age    
    -> FROM pet;结果是:
+----------+------------+------------+------+
| name     | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| Fluffy   | 1993-02-04 | 2003-08-19 |   10 |
| Claws    | 1994-03-17 | 2003-08-19 |    9 |
| Buffy    | 1989-05-13 | 2003-08-19 |   14 |
| Fang     | 1990-08-27 | 2003-08-19 |   12 |
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Chirpy   | 1998-09-11 | 2003-08-19 |    4 |
| Whistler | 1997-12-09 | 2003-08-19 |    5 |
| Slim     | 1996-04-29 | 2003-08-19 |    7 |
| Puffball | 1999-03-30 | 2003-08-19 |    4 |
+----------+------------+------------+------+
上面的语句的执行结果是求是宠物的年龄。问题:
第三行我看不懂。第三行是不是多余呢?两个年相减不就是年龄了吗?还有,能帮我解释下第三句的含义吗?谢谢!

解决方案 »

  1.   

    哪一个是第三句? 不就只有一句SQL?
      

  2.   

    RIGHT(CURDATE(),5)是取当前日期从右边数的五位吗?比如:20110723,那结果应该是10723啊?请问是这样吗?
      

  3.   

    楼主难道不能先看一下 select CURDATE() 的结果是什么? select RIGHT(CURDATE(),5)的结果是什么吗? 自己动手看一下很难?
      

  4.   

    我知道了,原来MySql把日期中间的“-”也算上位了,呵呵!谢谢啊