MySQL提供了用于计算日期的函数,例如计算年龄或者日期的特定部分。
要确定你的宠物有多大了,可以使用 TIMESTAMPDIFF() 函数,这个函数的第一个参数指定比较结果展示的单位,第二三个参数是两个将要比较的日期,下列查询显示了宠物的出生日期,当前日期以及宠物的年龄,结果使用了别名 age ,这样结果列名更有意义。
查询成功了,但是如果结果以特定顺序展示,则更有利于我们查看。可以通过ORDER BY name子句对结果按name列排序:
如果要对结果按年龄排序,仅需更改ORDER BY子句:
可以使用类似的方法查询动物死时的年龄,可以通过检查death的值是否为NULL来查出已经死亡的动物,然后计算出生和死亡的时间差值:
查询使用了death IS NOT NULL而不是 death <> NULL ,这是因为NULL是一个特殊的值,不能使用常规的比较操作符进行比较。
如果想知道哪些动物的生日在下个月,该怎么办呢?对于这类计算,年和日期是无关的信息,我们仅需要提取出生日期中的月份,MySQL提供了几个函数用来从日期中提取信息,例如YEAR(),MONTH()和DAYOFMONTH(),这里使用MONTH()函数是适合的。简单示例如下:
如果当前是4月份,查找下个月过生日的动物:
如果当前月份是12月,那么这个查询会有一点复杂,我们不能仅仅是对当前月份加1,然后查询出生在13月的动物,因为根本没有这个月份,相应的,我们应该查找出生在1月份的动物。我们可以通过写查询语句来解决这个问题,无论当前月份是什么。DATE_ADD()用于对给定日期增加时间间隔。如果要对CURDATE()的时间值增加1个月,然后用MONTH()查出日期月份,结果就是我们要求的月份:
另外一种方法是查询当前月份,月份加1得到下一个月的月份,然后使用取模(MOD)函数将12月份的月转换成0。
MONTH()函数返回一个1-12之间的数值, MOD(something,12) 函数返回一个0-11之间的值。因此加1一定是在MOD()函数之后。
如果计算使用了无效日期,则计算失败并产生警告: