金沙棋牌app手机下载

当前位置:金沙棋牌 > 金沙棋牌app手机下载 > 除零操作,sqlserver避免sql脚本中出现除零错误的

除零操作,sqlserver避免sql脚本中出现除零错误的

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-09-16 01:59

摘要:
下文介绍sql server中,sql脚本避免出现除零错误的方法分享

我们知道,null与任何数进行任何运算,其结果都等于null,利用这点,我们可以将上面的sql改写为:

C:给一个列取一个别名可以使用as 或者省略as

注意:多行函数在sql中的使用;


利用nullif函数

  1. sqlplus sys/sys@192.168.22.220:1521/orcl as sysdba;
  2. conn scott/123456@192.168.22.210:1521/orcl; 从当前用户转换成scott用户
  3. show user; 显示当前用户名
  4. show linesize; 显示的行宽
  5. set linesize 150; 设置行宽
  6. col ename for a8; col sal for 9999;设置列ename为字符长度为8个长度;设置列sal为4位数字;
  7. c 命令字符替换,如: c /form/from 或者c!form!from
  8. host cls;清屏幕
  9. spool d:/1.sql 将命令写入到1.sql文件中。spool off终止写入文件中。

07-字符函数和数值函数

在各种业务系统开发中,通常会遇到除零的错误,下文分享了两种处理方法:
方法1: case when end 

其运行结果自然为null了。

日期 + 数字 = 日期

     select empno as “员工编号” , ename 员工姓名 from emp;

方法2:nullif
nullif(表达式A,表达式B)
—-如果表达式A不等于表达式B,则返回表达式A
—-反之返回NULL 

set @a=10

  1. 查询的时候尽量使用列名;如:select ename,sal from emp; 
  2. 金沙棋牌app手机下载,分组查询没有多行函数(聚合函数),如果使用过滤,考虑使用where还是having
  3. 在子查询和多表查询之间选择,尽量使用多表查询
  4. 在集合运算中,如果union 和union all都可以,考虑使用union all 。因为union需要去掉重复的。
  5. 能够不要使用集合运算就不要使用集合运算。

A:where 后面比较运算符(>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null)

declare @a int ---分子
declare @b int ---分母
select @a/nullif(@b,0) as [a除以b]

set @b=0

07-字符函数和数值函数

B:分组

declare @a int ---分子
declare @b int ---分母
select  case  when @b=0 then NULL else @a/@b end  as [a除以b]

NULLIF( expression , expression )

B:sql优化原则

D:distinct 取出后面的所有列唯一值

 

其作用就是:如果两个指定的表达式相等,就返回null值。

  1. between and (包括边界,小值在前,大值在后)
  2. in后面集合中可以加null,not in()集合中不能有null
  3. 注意:where 后面用于过滤或者连接其他表的条件,重点掌握常用>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null操作;

 注意:操作返回一行数据的函数叫单行函数,操作返回的多行数据的函数叫多行函数;


isnull的定义如下:

注意:condition1 and condition2 和condition2 and condition1的区别;解析的顺序是从右边到左边;explain plan for select * from emp where condition1 and condition2;

B:to_char():日期转换成字符串,数字转换成字符

摘自:

nullif函数有两个参数,定义如下:

oracle中判断一个列值为null使用is null 或者is not null

E:|| 和concat() 将字符连接起来

 

declare @b int;

dual是伪表;

注意:掌握to_char(),to_number(),to_date() ,3个转换函数;

运行结果:null

A:分组函数(avg(),max(),min(),count(),sum())

B:判断列值为null

isnull(参数1,参数2)

注意:掌握to_char(),to_number(),to_date() ,3个转换函数;

A:分组函数(avg(),max(),min(),count(),sum())

再利用isnull函数,我们就可以实现当@b=0的时候,结果返回1的需求了。最终的sql改写如下:

D:distinct 取出后面的所有列唯一值

A:处理列值为null

其作用就是,当参数1等于null时,就返回参数2的值。)

10-通用函数和条件表达式

select concat(‘hello’,’world’) from dual;使用concat()后面需要加表。mysql并严格遵循sql1990标准;

declare @a int;

            select ‘hello’ || ‘world’ from dual;

dual是伪表;

select @a/nullif(@b,0)

B:to_char():日期转换成字符串,数字转换成字符

OK,两种方法介绍完毕,相对于方法一,我更推荐大家使用方法二,因为方法二的代码更简省。

select distinct job,deptno from emp;这里的distinct作用于后面的所有的列。

B:查询排序(order by)

(如果有朋友对isnull函数不了解的话,这里可以解释一下。

D:to_date():字符串转换成日期

C:to_number():字符串转换成数字

select nullif(0,0)

04-过滤where

03-SQL和iSQLPLUS

看一示例:

       group by  having  order by

日期 – 日期 = 数字

set @a=10

select * from emp order by comm desc nulls last;

oracle中的列值为null做四则运算结果都为null。处理方法:nvl(null,0) 

set @b=0

B:数值函数

 06-函数简介

select isnull(@a/nullif(@b,0),1)

注意:掌握oracle的常规命令,在学习过程中总结一些优化原则;

A:单行函数和多行函数

declare @a int;

05-逻辑运算符和排序

  1. sqlplus sys/sys@192.168.22.220:1521/orcl as sysdba;
  2. conn scott/123456@192.168.22.210:1521/orcl; 从当前用户转换成scott用户
  3. show user; 显示当前用户名
  4. show linesize; 显示的行宽
  5. set linesize 150; 设置行宽
  6. col ename for a8; col sal for 9999;设置列ename为字符长度为8个长度;设置列sal为4位数字;
  7. c 命令字符替换,如: c /form/from 或者c!form!from
  8. host cls;清屏幕
  9. spool d:/1.sql 将命令写入到1.sql文件中。spool off终止写入文件中。

declare @b int;

B:判断列值为null

A:oracle中隐式转换(查百度)

A:where 后面比较运算符(>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null)

B:数值函数

注意:nvl(),nvlif()和2个条件语句必须掌握。

            select ‘hello’ || ‘world’ from dual;

A:sql、sqlplus、isqlplus区别

注意:condition1 and condition2 和condition2 and condition1的区别;解析的顺序是从右边到左边;explain plan for select * from emp where condition1 and condition2;

A:单行函数和多行函数

  1. sql:insert update delete等常见的sql语句,关键词没有缩写。命令可以控制表中定义和数据;
  2. sqlplus:desc/ed/c/col/for等命令都是sqlplus命令,关键词有缩写,命令不能改变数据库中的数据;访问sqlplus服务端口是1158;
  3. isqlplus:是sqlplus是网页版本的sqlplus。可以执行脚本,也可以运行脚本;访问isqlplus服务需要访问5560端口;

B:查询排序(order by)

04-过滤where

E:|| 和concat() 将字符连接起来

oracle中判断一个列值为null使用is null 或者is not null

  1. 大小写控制

如果列中有值为null,则desc排序会出现null值行在前null最大,为了解决该问题:

注意:order by 多个列参与排序的特殊性。

注意:order by 多个列参与排序的特殊性。

C:to_number():字符串转换成数字

  1. nvl(expr1,expr2) 如果repr1是null则把expr1处理成expr2
  2. nvl2(expr1,expr2,expr3),如果repr1不为null,则值为expr2,为null则返回expr3
  3. nullif(expr1,expr2),如果repr1=repr2,则返回null,否则返回expr1
  4. coalesce(expr1,expr2….), 依次参考各参数表达式,遇到非null值即停止并返回该值。
    如果所有的表达式都是空值,最终将返回一个空值B:条件表达式
    1. case  xx when xx then xx  when xxx  then xx else xx end;
    2. decode()
  1. truncate():截断

11-多行函数

08-日期函数

A:通用函数

A:一些命令

A:sql、sqlplus、isqlplus区别

日期 – 数字 = 日期

注意:掌握oracle的常规命令,在学习过程中总结一些优化原则;

Oracle中提供了很多和日期相关的函数,包括日期的加减,在日期加减时有一些规律

不能使用单引号;

A:字符函数

日期 – 数字 = 日期

 注意:操作返回一行数据的函数叫单行函数,操作返回的多行数据的函数叫多行函数;

09-转换函数

A:where 后面使用逻辑运算符(and ,or ,not)

  1. round():四舍五入

B:分组

A:一些命令

  1. round():四舍五入

02-空值和别名

oracle中的列值为null做四则运算结果都为null。处理方法:nvl(null,0) 

            select distinct(job) from emp;可以将加()

A:oracle中隐式转换(查百度)

Oracle中提供了很多和日期相关的函数,包括日期的加减,在日期加减时有一些规律

select concat(‘hello’,’world’) from dual;使用concat()后面需要加表。mysql并严格遵循sql1990标准;

select * from emp order by comm desc nulls last;

     select empno as “员工编号” , ename 员工姓名 from emp;

C:给一个列取一个别名可以使用as 或者省略as

A:日期函数

  1. truncate():截断

A:处理列值为null

注意:重点掌握length(),substr(),instr(),round().

         注意:字符串使用单引号‘’,不能使用双引号“”,使用双引号的是别名。

A:where 后面使用逻辑运算符(and ,or ,not)

11-多行函数

  1. 查询的时候尽量使用列名;如:select ename,sal from emp; 
  2. 分组查询没有多行函数(聚合函数),如果使用过滤,考虑使用where还是having
  3. 在子查询和多表查询之间选择,尽量使用多表查询
  4. 在集合运算中,如果union 和union all都可以,考虑使用union all 。因为union需要去掉重复的。
  5. 能够不要使用集合运算就不要使用集合运算。
  1. sql:insert update delete等常见的sql语句,关键词没有缩写。命令可以控制表中定义和数据;
  2. sqlplus:desc/ed/c/col/for等命令都是sqlplus命令,关键词有缩写,命令不能改变数据库中的数据;访问sqlplus服务端口是1158;
  3. isqlplus:是sqlplus是网页版本的sqlplus。可以执行脚本,也可以运行脚本;访问isqlplus服务需要访问5560端口;

08-日期函数

order by 列名/表达式/别名/序列. 且order by 后面可以接多个列

     注意:别名需要使用“”,或者不加“”。别名中间有空格的需要“”;

  1. nvl(expr1,expr2) 如果repr1是null则把expr1处理成expr2
  2. nvl2(expr1,expr2,expr3),如果repr1不为null,则值为expr2,为null则返回expr3
  3. nullif(expr1,expr2),如果repr1=repr2,则返回null,否则返回expr1
  4. coalesce(expr1,expr2….), 依次参考各参数表达式,遇到非null值即停止并返回该值。
    如果所有的表达式都是空值,最终将返回一个空值B:条件表达式
    1. case  xx when xx then xx  when xxx  then xx else xx end;
    2. decode()
  1. 后面=可以接数据或者字符串,其中日期格式需要注意

不能使用单引号;

05-逻辑运算符和排序

注意:多行函数在sql中的使用;

         注意:字符串使用单引号‘’,不能使用双引号“”,使用双引号的是别名。

日期 – 日期 = 数字

01-基本的查询语句

A:通用函数

A:字符函数

            select distinct(job) from emp;可以将加()

注意:nvl(),nvlif()和2个条件语句必须掌握。

     注意:别名需要使用“”,或者不加“”。别名中间有空格的需要“”;

       group by  having  order by

 因为该日期字符串格式与oracle当前格式不一致,oralce无法处理成日期类型。但是可以修改日期格式;alter session|system set NLS_DATE_FORMATE=’yy-mm-dd’.select * from v$nls_parameters; 可以查看到系统的所有变量;

order by 列名/表达式/别名/序列. 且order by 后面可以接多个列

  1. 后面=可以接数据或者字符串,其中日期格式需要注意

select distinct job,deptno from emp;这里的distinct作用于后面的所有的列。

    如果select * from emp where hiredate=’81-09-08’ 执行会出现错误;

B:sql优化原则

 06-函数简介

日期 + 数字 = 日期

09-转换函数

D:to_date():字符串转换成日期

01-基本的查询语句

  1. between and (包括边界,小值在前,大值在后)
  2. in后面集合中可以加null,not in()集合中不能有null
  3. 注意:where 后面用于过滤或者连接其他表的条件,重点掌握常用>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null操作;

02-空值和别名

    如果select * from emp where hiredate=’81-09-08’ 执行会出现错误;

如果列中有值为null,则desc排序会出现null值行在前null最大,为了解决该问题:

10-通用函数和条件表达式

注意:重点掌握length(),substr(),instr(),round().

  1. 大小写控制

 因为该日期字符串格式与oracle当前格式不一致,oralce无法处理成日期类型。但是可以修改日期格式;alter session|system set NLS_DATE_FORMATE=’yy-mm-dd’.select * from v$nls_parameters; 可以查看到系统的所有变量;

03-SQL和iSQLPLUS

A:日期函数

本文由金沙棋牌发布于金沙棋牌app手机下载,转载请注明出处:除零操作,sqlserver避免sql脚本中出现除零错误的

关键词: