仓酷云

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

[学习教程] MYSQL网页设计关于MSSQL Server中DATETIME范例数据的...

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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的维护和管理在很大程度上是“傻瓜型”的。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-19 11:45:17 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
小魔女 该用户已被删除
板凳
发表于 2015-1-24 16:04:10 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
蒙在股里 该用户已被删除
地板
发表于 2015-2-2 09:38:06 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
乐观 该用户已被删除
5#
发表于 2015-2-7 17:59:56 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
老尸 该用户已被删除
6#
发表于 2015-2-22 20:17:09 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
爱飞 该用户已被删除
7#
发表于 2015-3-7 02:55:58 | 只看该作者
总感觉自己还是不会SQL
活着的死人 该用户已被删除
8#
发表于 2015-3-14 09:59:27 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
因胸联盟 该用户已被删除
9#
发表于 2015-3-21 02:24:42 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 01:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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