sql server中除数为零的处置技能
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并没有他们需要的那么快和灵活。 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。 不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关 groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
页:
[1]