仓酷云

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

[学习教程] MSSQL教程之SQL Server工夫格局浅析

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:27:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
MyISAMMysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务server


SQLServer工夫格局浅析



数据库中工夫日期常常是一个很主要的数据。各个盘算机上的工夫常常分歧,为了在数据库中拔出一致的工夫,假如是取以后时候,最好间接从数据库服务器读取。好比有一个表名为tablename的表格,个中columnname字段是以后纪录拔出时确当前工夫,则该拔出语句应写为:insertintotablename(columnname,…)values(GetDate(),…)。如许GetDate()函数将数据库服务器确当前工夫拔出该纪录中。

在查找一切当天的纪录前,先来剖析一下T-SQL的工夫日期暗示体例。在T-SQL中,工夫日期格局数据范例实践上是一个浮点数范例,纪录的是以后工夫到1900年1月1日0时的天数,加上残剩的工夫化成小数。上面的语句:

selectgetdate()as以后工夫,cast(getdate()asfloat)as距1900年1月1日天数

将前往:



以后工夫距1900年1月1日天数

--------------------------------------------------------------------------------

2001-11-1011:05:35.73337203.462219135799



(1row(s)affected)



以是要查找当天拔出的纪录,理所应该的会想到用GetDate()猎取两个以后工夫,并将前一个用Convert或Cast函数转换为整数(记为IntToday),将后一个转换为浮点数(记为FloatNow),再将必要查找的纪录日期也转换为浮点数(记为FloatCheck),只需利用前提”…whereFloatCheckbetweenIntTodayandFloatNow”就能够找出哪些工夫是属于明天的工夫。如今看起来的确云云。

表格testtable有三个字段,id是一个主动增加的主键,inserttime是纪录拔出时候的工夫,comment字段是为了便利察看设立的。该表格中共有四笔记录,前两笔记录是11月9日拔出的,后两条是11月10日拔出的。

第一条SQL语句前往该表格中的一切纪录。

select*fromtesttable



idinserttimecomment

----------------------------------------------------------------------------------------------

12001-11-0910:28:42.943第一笔记录

22001-11-0917:43:22.503第二笔记录

32001-11-1011:29:11.907第三笔记录

42001-11-1011:29:51.553第四笔记录



(4row(s)affected)



上面的语实验选出明天(2001年11月10日)拔出的纪录,该语句实行时的数据库服务器工夫是2001-11-1011:40:57.800



select*fromtesttablewherecast(inserttimeasfloat)betweencast(GetDate()asint)andcast(GetDate()asfloat)



idinserttimecomment

----------------------------------------------------------------------------------------------

32001-11-1011:29:11.907第三笔记录

42001-11-1011:29:51.553第四笔记录

(2row(s)affected)



这条语句乐成地过滤了前一天发生的纪录。

如今地11点51分,午饭工夫到了,我要等一会再持续事情。

12点26分,入手下手事情前让我先浏览一下本人的“佳构”。但是,出成绩了,那条用来过滤的语句甚么也没有前往。往失落where子句再实行,本来的纪录还在。也就是说数据库里的纪录不再满意前提了。没有其余举措,让我们来看看前提产生了甚么变更。

实行语句:

selectcast(inserttimeasfloat)asFloatCheck,cast(GetDate()asint)asIntToday,cast(GetDate()asfloat)asFloatNowfromtesttable

了局前往:



FloatCheckIntTodayFloatNow

-----------------------------------------------------------------------------------

3702.43660814043372043703.524545756176

3702.728274807101372043703.524545756176

3703.478610030863372043703.524545756176

3703.479068904322372043703.524545756176



(4row(s)affected)



注重到IntToday比FloatNow年夜,这就是前提不再满意的缘故原由。本来cast()函数其实不复杂地往失落小数,而是四舍五进,以是下战书(cast(GetDate()asint))前往的值比上午前往的要年夜1。在程序中不成能先判别上午和下战书再选择SQL语句实行,因而有需要对GetDate()前往的值做一下数学上的处置。注重到cast(GetDate()asint)当世界午前往的值和前一世界午前往的值一样年夜,我的举措是先将GetDate()值减往0.5。如许假如是上午,减往0.5后变成前一天的下战书,小数部分“进”,假如是下战书,减往0.5后变成当天上午,小数部分“往”。写成的新语句以下:

select*fromtesttablewherecast(inserttimeasfloat)betweencast(GetDate()-0.5asint)andcast(GetDate()asfloat)

实行了局一般。

别的,现实上float(也多是real)数据范例是DateTime数据范例的基础范例,以是它们之间能够通明地对照,也就是说不用举行转换就可以间接对照,像如许:

select*fromtesttablewhereinserttimebetweencast(GetDate()-0.5asint)andGetDate()

我先前做的转换只是为了便利申明。
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
老尸 该用户已被删除
沙发
发表于 2015-1-18 06:00:05 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
莫相离 该用户已被删除
板凳
发表于 2015-1-21 11:51:00 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
深爱那片海 该用户已被删除
地板
发表于 2015-1-30 17:35:48 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
小妖女 该用户已被删除
5#
发表于 2015-2-6 14:29:37 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
6#
发表于 2015-2-16 13:02:06 | 只看该作者
大侠们有推荐的书籍和学习方法写下吧。
谁可相欹 该用户已被删除
7#
发表于 2015-3-5 06:46:55 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
活着的死人 该用户已被删除
8#
发表于 2015-3-11 23:58:26 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
透明 该用户已被删除
9#
发表于 2015-3-19 16:40:36 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
山那边是海 该用户已被删除
10#
发表于 2015-3-29 11:43:08 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 08:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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