马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
当然,或许这并不是我们拒绝MySQL的一个有说服力的MySQL学习教程,但是对于一些比较守旧的IT经理来说,在为一些关键业务选择平台的时候,平台的成熟性却是必须要考虑的一个因素,在这一点上,MySQL无疑毫无优势。前往以后日期和工夫
经由过程函数GETDATE(),你能够取得以后的日期和工夫。函数GETDATE()能够用来作为DATEDIME型字段的缺省值。这对拔出纪录时保留事先的工夫是有效的。要创建一个表,个中的纪录包括有以后的日期和工夫,能够增加一个DATETIME型字段,指定其缺省值为函数GETDATE()的前往值,就象如许:
CREATETABLEsite_log(
usernameVARCHAR(40),
useractivityVARCHAR(100),
entrydateDATETIMEDEFAULTGETDATE())
转换日期和工夫
函数GETDATE()的前往值在显现时只显现到秒。实践上,SQLSever外部工夫能够准确到毫秒级(切实地说,能够准确到3.33毫秒)。
要失掉分歧格局的日期和工夫,你必要利用函数CONVERT()。比方,当上面的这个语句实行时,显现的工夫将包含毫秒:
SELECTCONVERT(VARCHAR(30),GETDATE(),9)
注重例子中数字9的利用。这个数字指了然在显现日期和工夫时利用哪一种日期和工夫格局。当这个语句实行时,将显现以下的日期和工夫:
Nov3019973:29:55:170AM
(1row(s)affected)
在函数CONVERT()中你可使用很多种分歧作风的日期和工夫格局。下表显现了一切的格局。
日期和工夫的范例:
范例值尺度输入
0Defaultmonddyyyyhh:miAM
1USAmm/dd/yy
2ANSIyy.mm.dd
3British/Frenchdd/mm/yy
4Germandd.mm.yy
5Italiandd-mm-yy
6-ddmonyy
7-mondd,yy
8-hh:mi:ss
9Default+milliseconds--monddyyyy
hh:mi:ss:mmmAM(or)
10USAmm-dd-yy
11JAPANyy/mm/dd
12ISOyymmdd
13EuropeDefault+milliseconds--ddmonyyyy
hh:mi:ss:mmm(24h)
14-hh:mi:ss:mmm(24h)
范例0,9,和13老是前往四位的年。对别的范例,要显现世纪,把style值加上100。范例13和14前往24小不时钟的工夫。范例0,7,和13前往的月份用三位字符暗示(用Nov代表November).
对表中所列的每种格局,你能够把范例值加上100来显现有世纪的年(比方,00年将显现为2000年)。比方,要按日本尺度显现日期,包含世纪,你应利用以下的语句:
SELECTCONVERT(VARCHAR(30),GETDATE(),111)
在这个例子中,函数CONVERT()把日期格局举行转换,显现为1997/11/30
抽取日期和工夫
在很多情形下,你大概只想失掉日期和工夫的一部分,而不是完全的日期和工夫。为了抽取日期的特定部分,你可使用函数DATEPART(),象如许:
SELECTsite_name‘SiteName’,
DATEPART(mm,site_entrydate)‘MonthPosted’FROMsite_directory
函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个变量是实践的数据。在这个例子中,函数DATEPART()抽取月份,由于mm代表月份。上面是这个SELECT语句的输入了局:
SiteNameMonthPosted
………………………………………………………………
Yahoo2
Microsoft5
Magicw35
(3row(s)affected)
MonthPosted列显现了每一个站点被查询的月份。函数DATEPART()的前往值是一个整数。你能够用这个函数抽取日期的各个分歧部分,以下表所示。
日期的各部分及其简写
日期部分简写值
yearyy1753--9999
quarterqq1--4
monthmm1--12
dayofyeardy1--366
daydd1--31
weekwk1--53
weekdaydw1--7(Sunday--Saturday)
hourhh0--23
minutemi0--59
secondss0--59
milisecondms0--999
当你必要举行日期和工夫的对照时,利用函数DATEPART()前往整数是有效的。可是,上例中的查询了局(2,5)不是非常易读。要以更容易读的格局失掉部分的日期和工夫,你可使用函数DATENAME(),以下例所示:
SELECTsite_name‘SiteName’
DATENAME(mm,site_entrydate)‘MonthPosted’
FROMsite_directory
函数DATENAME()和函数DATEPART()吸收一样的参数。可是,它的前往值是一个字符串,而不是一个整数。上面是上例该用DATENAME()失掉的了局:
SiteNameMonthPostec
………………………………………………………………….
YahooFebruary
MicrosoftJune
Magicw3June
(3row(s)affected)
你也能够用函数DATENAE()来抽取一个礼拜中的某一天。上面的这个例子同时抽取一周中的某一天和日期中的月份:
SELECTsite_name‘SiteName’,
DATENAME(dw,site_entrydate)+‘-’+DATENAME(mm,site_entrydate)
‘DayandMonthPosted’FORMsite_directory
这个例子实行时,将前往以下的了局:
SiteNameDayandMonthPosted
………………………………………………………………………
YahooFriday-February
MicrosoftTuesday-June
Magicw3Monday-June
(3row(s)affected)
前往日期和工夫局限
当你剖析表中的数据时,你大概但愿掏出某个特准时间的数据。你大概对特定的某一天中DD好比说2000年12月25日DD会见者在你站点上的举动感乐趣。要掏出这类范例的数据,你大概会试图利用如许的SELECT语句:
SELECT*FROMweblogWHEREentrydate="12/25/20000"
不要如许做。这个SELECT语句不会前往准确的纪录DD它将只前往日期和工夫是12/25/200012:00:00:000AM的纪录。换句话说,只要恰好在半夜零点输出的纪录才被前往。
成绩是SQLSever将用完全的日期和工夫取代部分日期和工夫。比方,当你输出一个日期,但不输出工夫时,SQLSever将加上缺省的工夫“12:00:00:000AM”。当你输出一个工夫,但不输出日期时,SQLSever将加上缺省的日期“Jan11900”。
要前往准确的纪录,你必要合用日期和工夫局限。有不止一种路子能够做到这一点。比方,上面的这个SELECT语句将能前往准确的纪录:
SELECT*FROMweblog
WHEREentrydate>=”12/25/2000”ANDentrydate<”12/26/2000”
这个语句能够完成义务,由于它拔取的是表中的日期和工夫年夜于即是12/25/200012:00:00:000AM并小于12/26/200012:00:00:000AM的纪录。换句话说,它将准确地前往2000年圣诞节这一天输出的每笔记录。
另外一种办法是,你可使用LIKE来前往准确的纪录。经由过程在日期表达式中包括通配符“%”,你能够婚配一个特定日期的一切工夫。这里有一个例子:
SELECT*FROMweblogWHEREentrydateLIKE‘Dec252000%’
这个语句能够婚配准确的纪录。由于通配符“%”代表了任什么时候间。
利用这两种婚配日期和工夫局限的函数,你能够选择某个月,某一天,某一年,某个小时,某一分钟,某一秒,乃至某一毫秒内输出的纪录。可是,假如你利用LIKE来婚配秒或毫秒,你起首必要利用函数CONVERT()把日期和工夫转换为更准确的格局(拜见后面“转换日期和工夫”一节)。
对照日期和工夫
最初,另有两个日期和工夫函数对依据日期和工夫掏出纪录是有效的。利用函数DATEADD()和DATEDIFF(),你能够对照日期的日夕。比方,上面的SELECT语句将显现表中的每笔记录已输出了几个小时:
SELECTentrydate‘TimeEntered’
DATEDIFF(hh,entrydate,GETDATE())‘HoursAgo’FROMweblog
假如以后工夫是2000年11月30号下战书6点15分,则会前往以下的了局:
TimeEnteredHoursAgo
…………………………………………………..
Dec3020004:09PM2
Dec3020004:13PM2
Dec120004:09PM698
(3row(s)affected)
函数DADEDIFF()的参数是三个变量。第个变量指定日期的某一部分。在这个例子中,是按小时对日期举行对照,(要懂得日期各部分的具体内容,请参考表11.2)在日期2000年11月1日和2000年11月30日的指准时间之间有689个小时。别的两个参数是要举行对照的工夫。为了前往一个负数,较早的工夫应当先给。
函数DATEADD()把两个日期相加。当你必要盘算停止日期这一类的数据时,这个函数是有效处的。假设你要查询一个月前注册用户的纪录,你可使用以下的SELECT语句:
SELECTusername‘UserName’,
DATEADD(mm,1,firstvisit_date)‘RegistrationExpires’
FROMregistration_table
函数DATEADD()的参数有三个变量。第一个变量代表日期的某一部分,这个例子用到了代表月份的mm。第二个变量指定了工夫的距离DD在本例中是一个月。最初一个变量是一个日期,在这个例子中,日期是取自DATETIME型字段firstvisit_date.假定以后日期是June30,2000,这个语句将前往以下的内容:
UserNameRegistrationExpires
……………………………………………………………………………
BillGatesJul3020004:09PM
PresidentClintonJul3020004:13PM
WilliamShakespeareJul120004:09PM
(3row(s)affected)
注重:
利用函数DATEADD()把一个日期加上一个月,它其实不加上30天。这个函数只复杂地把月份值加1。
你不用花费很多时间和金钱来培训现有的职工,或者去花大价钱雇用那些拥有各种证书的开发者。因为MySQL的维护和管理在很大程度上是“傻瓜型”的。 |