关于SQL avg 小数点位数的截取
在取一个平均值的时候往往遇到小数点位数的截取。
前几天遇到过这么个问题,在KingDee EAS 的查询分析器里面如果求某一物料的平均单价时我这样写道:
select avg = case sum(bentry.FQuantity) when 0 then 0 else (sum(bentry.famount)/sum(bentry.FQuantity)) end,
此语句看似没什么问题,毕竟是求平均值,可是如果要在页面显示小数点后两位时要怎么做呢?此报表不是BI样式,就在sql中如何实现?
正常情况下可以考虑的解决方案由很多,如:
cast( Round(A.iPrice,2) as varchar(50)) AS 单价
cast( Round(A.iPrice,0,1) as varchar(50)) AS 单价
cast(0.329999999999999 as numeric(5,2)或者decimal)
但是很抱歉 KingDee EAS 6.0 里面我发现不能使用 cast ,round ,而cast *******
as numberic /decimal 就更不能用了。
还可以考虑substing()函数,concat()函数之类的。后来发现Oracle DB 里面有个关键性的函数:
charindex很管用于是写了段sql如下:
avg = case charindex('.',"tableName.avgprice ) when 0 then tableName.avgprice else substring(tableName.avgprice,0,charindex('.',tableName.avgprice)+2) end
如果平均值为整数而没有'.'存在时也能很好的解决。这就是搭配case 和charindex的作用于好处!
为了方便对这一SQL进行了整理。
/**
* 截取小数点后两位
* @author Kobe Bryant24
* @param strsql
* @param tableName
* @return
*/
protected String filtrateFloatValue(String strsql,String tableName){
return strsql+"=case charindex('.'," +
tableName+"."+strsql+") when 0 then " +
tableName+"."+strsql+" else substring(" +
tableName+"."+strsql+",0,charindex('.'," +
tableName+"."+strsql+")+2) end" ;
}
相关文档:
如果你经常遇到下面的问题,你就要考虑使用SQL Server的模板来写规范的SQL语句了:
SQL初学者。
经常忘记常用的DML或是DDL SQL 语句。
在多人开发维护的SQL中,每个人都有自己的SQL习惯,没有一套统一的规范。
在SQL Server Management Studio中,已经给大家提供了很多常用的现成SQL规范模板。
SQL Server Management ......
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可 使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft SQL Server ......
SQL面试题
Sql常用语法
下列语句部分是Mssql语句,不可以在access中使用。
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句:
1、说明:创建 ......
清空共享池,关闭,重启数据库
SQL> shutdown immediate;
SQL> startup;
开启 时间统计
SQL> set timi on
SQL> select count(*) from dba_objects;
COUNT(*)
----------
11308
Elapsed: 00:00:00.19
SQL> /
COUNT(*)
----------
&nb ......
对于Oracle的第三方开发工具,本人钟爱于Quest SQL Navigator 5.5,因为它反应迅速、支持多个账号同时登录,平时使用起来很方便。
不过,发现它有个缺点,就是一查询大点的表,CPU就占用50%以上,搞到我的本本狂叫,我真受不了。
到它官网,发现有新版本6.2了,不过下载要注册什么的,嫌麻烦。
晚上,突 ......