关于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" ;
}
相关文档:
方法一:使用游标
declare @ProductName nvarchar(50)
declare pcurr cursor for select ProductName from Products
open pcurr
fetch next from pcurr into @ProductName
while (@@fetch_status = 0)
begin
print (@ProductName)
fetch next from pcurr into @ProductName
end
close pcurr
deallocate pcurr ......
存储过程代码:
--drop procedure p_page
--go
create procedure p_page
(
@Tables varchar(1000), --表名如testtable
@PrimaryKey varchar(100),--表的主键,必须唯一性
@Sort varchar(200) = NULL,--排序字段如f_Name asc或f_name desc(注意只能有一个排序字段)
@CurrentPage int = 1,--当 ......
Oracle 数据库 10g 提供了大量帮助程序(或“顾问程序”),可帮助您决定最佳操作流程。其中一个示例是 SQL Tuning Advisor,它可以提供有关查询调整以及在流程中延长整个优化过程的建议。
但请考虑以下调整案例:假设一个索引确实有助于某个查询,但该查询只执行一次。这样,即使该查询可以得益于此索引,但创 ......
对于Oracle的第三方开发工具,本人钟爱于Quest SQL Navigator 5.5,因为它反应迅速、支持多个账号同时登录,平时使用起来很方便。
不过,发现它有个缺点,就是一查询大点的表,CPU就占用50%以上,搞到我的本本狂叫,我真受不了。
到它官网,发现有新版本6.2了,不过下载要注册什么的,嫌麻烦。
晚上,突 ......
sql注入防止的方式:
1.最根本的办法就是使用预编译的方式进行数据库操作。即时使用?的方式。
2.使用过滤类。
防止跨站脚本的方式:
1.在数据录入阶段进行过滤,但是这种方式会是丢失一些数据。
2. 在数据展示阶段。使用标签包含,innerhtml 的方式。 ......