仓酷云

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

[学习教程] sql server中除数为零的处置技能

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

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

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

x
Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用在sqlserver中做除法处置的时分,我们常常必要处置除数为零的情形,由于假如碰到这类情形的时分,sqlserver会抛出碰到以零作除数毛病的非常,我们总不但愿把这个非常显现给用户吧。

做个会报这个毛病的示例,如以下sql代码:
declare@aint;
declare@bint;
set@a=10
set@b=0
select@a/@b

运转就会抛出碰到以零作除数毛病的毛病

本章次要解说一下怎样在sqlserver处置除数为零的两种办法:
一,使用case语句。
我们改写下面的sql,当@b=0的时分,我们就前往1.改写以下:
declare@aint;
declare@bint;
set@a=10
set@b=0
selectcase@bwhen0then1else@a/@bend

如许写固然是准确的,但显的贫苦,上面我们看一下第二处置办法。

二,使用nullif函数
nullif函数有两个参数,界说以下:
NULLIF(expression,expression)
其感化就是:假如两个指定的表达式相称,就前往null值。
看一示例:
selectnullif(0,0)

运转了局:null

我们晓得,null与任何数举行任何运算,其了局都即是null,使用这点,我们能够将下面的sql改写为:
declare@aint;
declare@bint;
set@a=10
set@b=0
select@a/nullif(@b,0)

其运转了局天然为null了。

再使用isnull函数,我们就能够完成当@b=0的时分,了局前往1的需求了。终极的sql改写以下:
declare@aint;
declare@bint;
set@a=10
set@b=0
selectisnull(@a/nullif(@b,0),1)

OK,两种办法先容终了,相对办法一,我更保举人人利用办法二,由于办法二的代码更简省。

(假如有伴侣对isnull函数不懂得的话,这里能够注释一下。
isnull的界说以下:
isnull(参数1,参数2)
其感化就是,当参数1即是null时,就前往参数2的值。)MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。
只想知道 该用户已被删除
沙发
发表于 2015-1-25 17:12:38 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
变相怪杰 该用户已被删除
板凳
 楼主| 发表于 2015-2-3 12:00:07 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
小女巫 该用户已被删除
地板
发表于 2015-2-8 22:44:45 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
柔情似水 该用户已被删除
5#
发表于 2015-2-26 13:17:59 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
莫相离 该用户已被删除
6#
发表于 2015-3-8 15:25:21 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
兰色精灵 该用户已被删除
7#
发表于 2015-3-16 03:52:24 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-22 20:10:20 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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