手机上自己如何做网站,免费帮助建站,河南郑州网站推广优化,做网站要花钱吗MySQL 日期跟时间函数(一)作者#xff1a; Mr.ZhangMySQL 日期跟时间的样式在MySQL 中有很多有用处的日期跟时间函数。我们常常看到许多应用于日期的计算是在代码方面上进行的#xff0c;但是其实他们完全可以使用MySQL中自带的函数来实现。在我们实际的查看MySQL的时间跟日期…MySQL 日期跟时间函数(一)作者 Mr.ZhangMySQL 日期跟时间的样式在MySQL 中有很多有用处的日期跟时间函数。我们常常看到许多应用于日期的计算是在代码方面上进行的但是其实他们完全可以使用MySQL中自带的函数来实现。在我们实际的查看MySQL的时间跟日期函数之前先让我们看看MySQL 的存储内容。DATETIME YYYY-MM-DD HH:MM:SSDATE YYYY-MM-DDTIMESTAMP YYYYMMDDHHSSMMTIME HH:MM:SSYEAR YYYYTIMESTAMP 栏存储了所有的14 个字符但是你其实可以自己定义他的显示方式。例如如果你按照TIMESTAMP(2)的方式来定义那么只会显示出2 位表示的年份但是所有的数据仍然是被保存的。如果日后你想要列出所有的数据的时候你只需要改变下限定条件所有的内容就会显现出来。下表就是不同的定义以及表现的结果。TIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYMySQL 对于所读入的日期的格式是非常宽容的。虽然MySQL 有使用很广的约定表现方式你仍然可以改用你喜欢的方式来表现。例如你创建如下一个表CREATE TABLE time_table(dt DATETIME);既可以使用如下约定的方式插入一条记录INSERT INTO time_table(dt) VALUES(2003-03-31 11:22:12)也可以象这样用’’和’’来实现INSERT INTO time_table(dt) VALUES(20030331 112212)当然虽然这种方法可行但是如果没有必要还是推荐你使用约定的方式。简单的日期计算日期计算非常简单。我们首先要查看的一个函数是YEAR() 。For example:mysql SELECT YEAR(2003-03-31);--------------------| YEAR(2003-03-31) |--------------------| 2003 |--------------------我们可以用“”“-”运算符直接进行一些简单的运算。例如你要察看该日期5 年后是哪一年you can usemysql SELECT YEAR(2003-03-31)5;----------------------| YEAR(2003-03-31)5 |----------------------| 2008 |----------------------那么同理5 年前的日期mysql SELECT YEAR(2003-03-31)-5;----------------------| YEAR(2003-03-31)-5 |----------------------| 1998 |----------------------当然你也可能有不知道具体时间的时候MySQL 给你提供了NOW() functionmysql SELECT NOW();---------------------| NOW() |---------------------| 2003-03-31 00:32:21 |---------------------或者CURRENT_DATE() function 只用来提供年月日mysql SELECT CURRENT_DATE();----------------| CURRENT_DATE() |----------------| 2003-03-31 |----------------当然也有其他的时间间隔取值函数 MONTH(), DAYOFMONTH(), HOUR(), MINUTE() andSECOND(). For examplemysql SELECT MONTH(NOW()) AS m,DAYOFMONTH(NOW()) AS d,HOUR(NOW()) AS h,MINUTE(NOW()) AS m,SECOND(NOW()) AS s;------------------------------| m | d | h | m | s |------------------------------| 3 | 31 | 1 | 53 | 38 |------------------------------DAYOFMONTH() function 是命名规范的一个例外因为他用了其他的方式返回日期。DAYOFMONTH() 返回的1-31 的天数,DAYNAME() 返回的是现实中的哪一天 DAYOFWEEK()返回的是1 (Sunday) to 7(Saturday) DAYOFYEAR() 返回的是1 到366。Some examplesmysql SELECT DAYNAME(2000-01-01);-----------------------| DAYNAME(2000-01-01) |-----------------------| Saturday |-----------------------mysql SELECT DAYOFWEEK(2000-01-01);-------------------------| DAYOFWEEK(2000-01-01) |-------------------------| 7 |-------------------------mysql SELECT DAYOFYEAR(2000-12-31);-------------------------| DAYOFYEAR(2000-12-31) |-------------------------| 366 |-------------------------计算年龄最常用的日期计算就是年龄计算不幸得是并没有什么函数可以直接实现这个功能所以这就需要我们稍微的动下脑筋现在让我们来做一些简单的数学计算--你会发现我从当前时间开始(31March 2003)。首先我们简单的从当前日期减掉出生日期mysql SELECT YEAR(CURRENT_DATE)-YEAR(1971-01-01);---------------------------------------| YEAR(CURRENT_DATE)-YEAR(1971-01-01) |---------------------------------------| 32 |---------------------------------------如果你直接回复这个数字那么明显的计算是正确的。某个出生于1971 年1 月1 日的人到2003 年3 月31 日是32 岁。但是如果是出生在12 月31 日的人呢mysql SELECT YEAR(CURRENT_DATE)-YEAR(1971-12-31);---------------------------------------| YEAR(CURRENT_DATE)-YEAR(1971-12-31) |---------------------------------------| 32 |---------------------------------------年龄出错了这个人还没有到32 岁。问题在于计算的时候只计算了年份他只用年份相减忽视了月份和日期最好的比较方式还是要用日期和月份先进行比较看是否出生日期小于当前日期 如果是这样,那只需要计算年份否则就需要减去一部分年份。这个听起来非常狡诈但是事实上不是。让我们慢慢理解一下MySQL 中对于TRUE 用1 表示。FALSE 用0 表示的方式对我们有很大的帮助For examplemysql SELECT 2319;-------| 2319 |-------| 1 |-------mysql SELECT 2319;-------| 2319 |-------| 0 |-------23 19(true) so MySQL 返回1 并且23 不小于19(false) so MySQL 返回0。现在我们需要一种方式来返回MM-DD 的日期形式 幸运的是现在我们有一个可以直接使用的函数了RIGHT() 它用于返回从右开始的定义的位数的数值。For examplemysql SELECT RIGHT(abcdef,2);-------------------| RIGHT(abcdef,2) |-------------------| ef |-------------------这样就返回了从右开始数2 位的数值ef 。当然如果你要求的位数超过纪录的位数将显示全部内容mysql SELECT RIGHT(abcdef,9);-------------------| RIGHT(abcdef,9) |-------------------| abcdef |-------------------所以为了返回MM-DD 的样式你需要返回5 位数据for examplemysql SELECT RIGHT(CURRENT_DATE(),5);-------------------------| RIGHT(CURRENT_DATE(),5) |-------------------------| 03-31 |-------------------------现在我们就有了计算一个年龄的所有的数据可以用下面的方法来计算了mysql SELECT YEAR(CURRENT_DATE()) - YEAR(1971-12-31)- (RIGHT(CURRENT_DATE(),5)------| age |------| 31 |------现在让我们来看一些不太常见的函数。首先我们来看看MySQL 为这些函数定义的可以接受的数据类型。SECOND ssMINUTE mmHOUR hhDAY DDMONTH MMYEAR YYMINUTE_SECOND mm:ssHOUR_MINUTE hh:mmDAY_HOUR DD:hhYEAR_MONTH YYYY-MMHOUR_SECOND hh:ssDAY_MINUTE DD hh:mmDAY_SECOND DD hh:mm:ss就是像你看到的这么多。事实上在你调用程序以前MySQL 还有很多事情可以做。用DATE_ADD()和DATE_SUB() 增加或减少时间和日期DATE_ADD() function 和ADDDATE() function 具有相同的作用都是用来在给定的日期和时间上增加一个特定的日期段或时间段DATE_ADD(日期时间间隔用日期时间型数据表示的时间间隔)。例如为了确定2003 年七月13 日14 天后的日期you can usemysql SELECT DATE_ADD(2003-07-13, INTERVAL 14 DAY);-----------------------------------------| DATE_ADD(2003-07-13, INTERVAL 14 DAY) |-----------------------------------------| 2003-07-27 |-----------------------------------------