+ -
当前位置:首页 → 问答吧 → 我刚开始学MySql,请问这个SQL语句的意思是什么呢?

我刚开始学MySql,请问这个SQL语句的意思是什么呢?

时间:2011-07-23

来源:互联网

这是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 |
+----------+------------+------------+------+
上面的语句的执行结果是求是宠物的年龄。

问题:
第三行我看不懂。第三行是不是多余呢?两个年相减不就是年龄了吗?还有,能帮我解释下第三句的含义吗?谢谢!

作者: Purplepower   发布时间: 2011-07-23

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

作者: ACMAIN_CHM   发布时间: 2011-07-23

引用 1 楼 acmain_chm 的回复:

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

语句的第三行

作者: Purplepower   发布时间: 2011-07-23

判断月份。如果是 201102 - 201005 则年龄为0

作者: ACMAIN_CHM   发布时间: 2011-07-23

引用 3 楼 acmain_chm 的回复:

判断月份。如果是 201102 - 201005 则年龄为0

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

作者: Purplepower   发布时间: 2011-07-23

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

作者: ACMAIN_CHM   发布时间: 2011-07-23