仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 905|回复: 6
打印 上一主题 下一主题

[学习教程] 公布mysql日期和工夫格局转换

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:12:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
应用程序需要使用数据库,数据库本身需要设计、开发和部署。还有MySQL学习教程,客户怎样实施混合系统,或者需要帮助管理多个云服务?关于每一个范例具有的值局限和而且指定日期什么时候间值的无效格局的形貌见7.3.6日期和工夫范例。
这里是一个利用日期函数的例子。上面的查询选择了一切纪录,其date_col的值是在最初30天之内:
MySQL>SELECTsomethingFROMtable
WHERETO_DAYS(NOW())-TO_DAYS(date_col)<=30;
DAYOFWEEK(date)
前往日期date的礼拜索引(1=礼拜天,2=礼拜一,……7=礼拜六)。这些索引值对应于ODBC尺度。
mysql>selectDAYOFWEEK(1998-02-03);
->3
WEEKDAY(date)
前往date的礼拜索引(0=礼拜一,1=礼拜二,……6=礼拜天)。
mysql>selectWEEKDAY(1997-10-0422:23:00);
->5
mysql>selectWEEKDAY(1997-11-05);
->2
DAYOFMONTH(date)
前往date的月份中日期,在1到31局限内。
mysql>selectDAYOFMONTH(1998-02-03);
->3
DAYOFYEAR(date)
前往date在一年中的日数,在1到366局限内。
mysql>selectDAYOFYEAR(1998-02-03);
->34
MONTH(date)
前往date的月份,局限1到12。
mysql>selectMONTH(1998-02-03);
->2
DAYNAME(date)
前往date的礼拜名字。
mysql>selectDAYNAME("1998-02-05");
->Thursday
MONTHNAME(date)
前往date的月份名字。
mysql>selectMONTHNAME("1998-02-05");
->February
QUARTER(date)
前往date一年中的季度,局限1到4。
mysql>selectQUARTER(98-04-01);
->2
WEEK(date)
 
WEEK(date,first)
关于礼拜天是一周的第一天的中央,有一个单个参数,前往date的周数,局限在0到52。2个参数情势WEEK()同意
你指定礼拜是不是入手下手于礼拜天或礼拜一。假如第二个参数是0,礼拜从礼拜天入手下手,假如第二个参数是1,
从礼拜一入手下手。
mysql>selectWEEK(1998-02-20);
->7
mysql>selectWEEK(1998-02-20,0);
->7
mysql>selectWEEK(1998-02-20,1);
->8
YEAR(date)
前往date的年份,局限在1000到9999。
mysql>selectYEAR(98-02-03);
->1998
HOUR(time)
前往time的小时,局限是0到23。
mysql>selectHOUR(10:05:03);
->10
MINUTE(time)
前往time的分钟,局限是0到59。
mysql>selectMINUTE(98-02-0310:05:03);
->5
SECOND(time)
返来time的秒数,局限是0到59。
mysql>selectSECOND(10:05:03);
->3
PERIOD_ADD(P,N)
增添N个月到阶段P(以格局YYMM或YYYYMM)。以格局YYYYMM前往值。注重阶段参数P不是日期值。
mysql>selectPERIOD_ADD(9801,2);
->199803
PERIOD_DIFF(P1,P2)
前往在时代P1和P2之间月数,P1和P2应当以格局YYMM或YYYYMM。注重,时代参数P1和P2不是日期值。
mysql>selectPERIOD_DIFF(9802,199703);
->11
DATE_ADD(date,INTERVALexPRtype)
 
DATE_SUB(date,INTERVALexprtype)
 
ADDDATE(date,INTERVALexprtype)
 
SUBDATE(date,INTERVALexprtype)
这些功效实行日期运算。关于MySQL3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。
在MySQL3.23中,你可使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定入手下手日期的
DATETIME或DATE值,expr是指定加到入手下手日期或从入手下手日期减往的距离值一个表达式,expr是一个字符串;它能够以
一个“-”入手下手暗示负距离。type是一个关头词,指明表达式应当怎样被注释。EXTRACT(typeFROMdate)函数从日期
中前往“type”距离。下表显现了type和expr参数如何被联系关系:type值寄义希冀的expr格局
SECOND秒SECONDS
MINUTE分钟MINUTES
HOUR工夫HOURS
DAY天DAYS
MONTH月MONTHS
YEAR年YEARS
MINUTE_SECOND分钟和秒"MINUTES:SECONDS"
HOUR_MINUTE小时和分钟"HOURS:MINUTES"
DAY_HOUR天和小时"DAYSHOURS"
YEAR_MONTH年和月"YEARS-MONTHS"
HOUR_SECOND小时,分钟,"HOURS:MINUTES:SECONDS"
DAY_MINUTE天,小时,分钟"DAYSHOURS:MINUTES"
DAY_SECOND天,小时,分钟,秒"DAYSHOURS:MINUTES:SECONDS"
MySQL在expr格局中同意任何标点分开符。暗示显现的是倡议的分开符。假如date参数是一个DATE值而且你的盘算仅仅
包括YEAR、MONTH和DAY部分(即,没偶然间部分),了局是一个DATE值。不然了局是一个DATETIME值。
mysql>SELECT"1997-12-3123:59:59"+INTERVAL1SECOND;
->1998-01-0100:00:00
mysql>SELECTINTERVAL1DAY+"1997-12-31";
->1998-01-01
mysql>SELECT"1998-01-01"-INTERVAL1SECOND;
->1997-12-3123:59:59
mysql>SELECTDATE_ADD("1997-12-3123:59:59",
INTERVAL1SECOND);
->1998-01-0100:00:00
mysql>SELECTDATE_ADD("1997-12-3123:59:59",
INTERVAL1DAY);
->1998-01-0123:59:59
mysql>SELECTDATE_ADD("1997-12-3123:59:59",
INTERVAL"1:1"MINUTE_SECOND);
->1998-01-0100:01:00
mysql>SELECTDATE_SUB("1998-01-0100:00:00",
INTERVAL"11:1:1"DAY_SECOND);
->1997-12-3022:58:59
mysql>SELECTDATE_ADD("1998-01-0100:00:00",
INTERVAL"-110"DAY_HOUR);
->1997-12-3014:00:00
mysql>SELECTDATE_SUB("1998-01-02",INTERVAL31DAY);
->1997-12-02
mysql>SELECTEXTRACT(YEARFROM"1999-07-02");
->1999
mysql>SELECTEXTRACT(YEAR_MONTHFROM"1999-07-0201:02:03");
->199907
mysql>SELECTEXTRACT(DAY_MINUTEFROM"1999-07-0201:02:03");
->20102
假如你指定太短的距离值(不包含type关头词希冀的距离部分),MySQL假定你免却了距离值的最左脸部分。比方,
假如你指定一个type是DAY_SECOND,值expr被但愿有天、小时、分钟和秒部分。假如你象"1:10"如许指定值,
MySQL假定日子和小时部分是丧失的而且值代表分钟和秒。换句话说,"1:10"DAY_SECOND以它等价于"1:10"MINUTE_SECOND
的体例注释,这对那MySQL注释TIME值暗示经由的工夫而非作为一天的工夫的体例有二义性。假如你利用的确不准确的日期,
了局是NULL。假如你增添MONTH、YEAR_MONTH或YEAR而且了局日期年夜于新月份的最年夜值天数,日子在新月用最年夜的天调剂。
mysql>selectDATE_ADD(1998-01-30,Interval1month);
->1998-02-28
注重,夙昔面的例子中词INTERVAL和type关头词不是辨别巨细写的。
TO_DAYS(date)
给出一个日期date,前往一个天数(从0年的天数)。
mysql>selectTO_DAYS(950501);
->728779
mysql>selectTO_DAYS(1997-10-07);
->729669
TO_DAYS()不盘算用于利用格列高里历(1582)呈现前的值。
FROM_DAYS(N)
给出一个天数N,前往一个DATE值。
mysql>selectFROM_DAYS(729669);
->1997-10-07
TO_DAYS()不盘算用于利用格列高里历(1582)呈现前的值。
DATE_FORMAT(date,format)
依据format字符串格局化date值。以下润色符能够被用在format字符串中:%M月名字(January……December)
%W礼拜名字(Sunday……Saturday)
%D有英语前缀的月份的日期(1st,2nd,3rd,等等。)
%Y年,数字,4位
%y年,数字,2位
%a缩写的礼拜名字(Sun……Sat)
%d月份中的天数,数字(00……31)
%e月份中的天数,数字(0……31)
%m月,数字(01……12)
%c月,数字(1……12)
%b缩写的月份名字(Jan……Dec)
%j一年中的天数(001……366)
%H小时(00……23)
%k小时(0……23)
%h小时(01……12)
%I小时(01……12)
%l小时(1……12)
%i分钟,数字(00……59)
%r工夫,12小时(hh:mm:ss[AP]M)
%T工夫,24小时(hh:mm:ss)
%S秒(00……59)
%s秒(00……59)
%pAM或PM
%w一个礼拜中的天数(0=Sunday……6=Saturday)
%U礼拜(0……52),这里礼拜天是礼拜的第一天
%u礼拜(0……52),这里礼拜一是礼拜的第一天
%%一个笔墨“%”。
一切的其他字符不做注释被复制到了局中。
mysql>selectDATE_FORMAT(1997-10-0422:23:00,%W%M%Y);
->SaturdayOctober1997
mysql>selectDATE_FORMAT(1997-10-0422:23:00,%H:%i:%s);
->22:23:00
mysql>selectDATE_FORMAT(1997-10-0422:23:00,
%D%y%a%d%m%b%j);
->4th97Sat0410Oct277
mysql>selectDATE_FORMAT(1997-10-0422:23:00,
%H%k%I%r%T%S%w);
->22221010:23:00PM22:23:00006
MySQL3.23中,在格局润色符字符前必要%。在MySQL更早的版本中,%是可选的。
TIME_FORMAT(time,format)
这象下面的DATE_FORMAT()函数一样利用,可是format字符串只能包括处置小时、分钟和秒的那些格局润色符。
其他润色符发生一个NULL值或0。
CURDATE()
 
CURRENT_DATE
以YYYY-MM-DD或YYYYMMDD格局前往明天日期值,取决于函数是在一个字符串仍是数字高低文被利用。
mysql>selectCURDATE();
->1997-12-15
mysql>selectCURDATE()+0;
->19971215
CURTIME()
 
CURRENT_TIME
以HH:MM:SS或HHMMSS格局前往以后工夫值,取决于函数是在一个字符串仍是在数字的高低文被利用。
mysql>selectCURTIME();
->23:50:26
mysql>selectCURTIME()+0;
->235026
NOW()
 
SYSDATE()
 
CURRENT_TIMESTAMP
以YYYY-MM-DDHH:MM:SS或YYYYMMDDHHMMSS格局前往以后的日期和工夫,取决于函数是在一个字符串仍是在数字的
高低文被利用。
mysql>selectNOW();
->1997-12-1523:50:26
mysql>selectNOW()+0;
->19971215235026
UNIX_TIMESTAMP()
 
UNIX_TIMESTAMP(date)
假如没有参数挪用,前往一个Unix工夫戳记(从1970-01-0100:00:00GMT入手下手的秒数)。假如UNIX_TIMESTAMP()用一
个date参数被挪用,它前往从1970-01-0100:00:00GMT入手下手的秒数值。date能够是一个DATE字符串、一个DATETIME
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格局的当地工夫的一个数字。
mysql>selectUNIX_TIMESTAMP();
->882226357
mysql>selectUNIX_TIMESTAMP(1997-10-0422:23:00);
->875996580
当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将间接承受值,没有隐含的“string-to-unix-timestamp”变更。
FROM_UNIXTIME(unix_timestamp)
以YYYY-MM-DDHH:MM:SS或YYYYMMDDHHMMSS格局前往unix_timestamp参数所暗示的值,取决于函数是在一个字符串
仍是或数字高低文中被利用。
mysql>selectFROM_UNIXTIME(875996580);
->1997-10-0422:23:00
mysql>selectFROM_UNIXTIME(875996580)+0;
->19971004222300
FROM_UNIXTIME(unix_timestamp,format)
前往暗示Unix工夫标志的一个字符串,依据format字符串格局化。format能够包括与DATE_FORMAT()函数列出的条
目一样的润色符。
mysql>selectFROM_UNIXTIME(UNIX_TIMESTAMP(),
%Y%D%M%h:%i:%s%x);
->199723rdDecember03:43:30x
SEC_TO_TIME(seconds)
前往seconds参数,变更成小时、分钟和秒,值以HH:MM:SS或HHMMSS格局化,取决于函数是在一个字符串仍是在数字
高低文中被利用。
mysql>selectSEC_TO_TIME(2378);
->00:39:38
mysql>selectSEC_TO_TIME(2378)+0;
->3938
TIME_TO_SEC(time)
前往time参数,转换成秒。
mysql>selectTIME_TO_SEC(22:23:00);
->80580
mysql>selectTIME_TO_SEC(00:39:38);
->2378
MySQL数据库归MySQLAB公司所有,但是这个软件是开源的,有一个MySQL学习教程可以免费下载。稍俱常识的新入门者都可以轻松实现在一个常见硬件上安装和配置MySQL。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-18 18:36:38 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
活着的死人 该用户已被删除
板凳
发表于 2015-1-26 22:36:23 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-4 23:34:39 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
莫相离 该用户已被删除
5#
发表于 2015-2-10 23:32:28 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
再现理想 该用户已被删除
6#
发表于 2015-3-1 17:31:36 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
金色的骷髅 该用户已被删除
7#
发表于 2015-3-24 09:44:12 | 只看该作者
光写几个SQL实在叫无知。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表