sql 函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 函数相关的知识,希望对你有一定的参考价值。

函数定义如下:
create or replace function sf_get_circuit_width(circuit_id char)
return char is
circuit_width char(1000);
begin
select total_width into circuit_width from
(
select c.circuit_no,sum(band_width) as total_width from
(
--速率为空,replace函数返回空
select x.circuit_no,cast(replace(x.band_width,'M','000000') as integer) as band_width from (
select b.circuit_no,REPLACE(sf_get_desc_china(b.circuit_rate),'K','000') as band_width
from pub_log_circuit b
where b.circuit_id in
(select a.opr_id from pub_opr_route a where a.res_id=circuit_id)
) x
) c
group by rollup(c.circuit_no)
) d where d.circuit_no is null;
EXCEPTION
WHEN NO_DATA_FOUND THEN
circuit_width := 0 ;
return(circuit_width);
end sf_get_circuit_width;

---------------------------调用函数
select sf_get_circuit_width(a.circuit_id) from pub_log_circuit a where a.circuit_id='000101560000000000241724'
查询结果总是为0

但如果直接用sql语句,
select total_width from
(
select c.circuit_no,sum(band_width) as total_width from
(
--速率为空,replace函数返回空
select x.circuit_no,cast(replace(x.band_width,'M','000000') as integer) as band_width from (
select b.circuit_no,REPLACE(sf_get_desc_china(b.circuit_rate),'K','000') as band_width
from pub_log_circuit b
where b.circuit_id in
(select a.opr_id from pub_opr_route a where a.res_id='000101560000000000241724')
) x
) c
group by rollup(c.circuit_no)
) d where d.circuit_no is null;
查询结果正常,结果为123256000

参考技术A 将所有 char 类型都改成 varchar 试试

SQL 函数

SQL 拥有很多可用于计数和计算的内建函数。

函数的语法

内建 SQL 函数的语法是:

SELECT function(列) FROM 表

函数的类型

在 SQL 中,基本的函数类型和种类有若干种。函数的基本类型是:

  • Aggregate 函数
  • Scalar 函数

合计函数(Aggregate functions)

Aggregate 函数的操作面向一系列的值,并返回一个单一的值。

注释:如果在 SELECT 语句的项目列表中的众多其它表达式中使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句!

"Persons" table (在大部分的例子中使用过)

NameAge
Adams, John 38
Bush, George 33
Carter, Thomas 28

MS Access 中的合计函数

函数描述
AVG(column) 返回某列的平均值
COUNT(column) 返回某列的行数(不包括 NULL 值)
COUNT(*) 返回被选行数
FIRST(column) 返回在指定的域中第一个记录的值
LAST(column) 返回在指定的域中最后一个记录的值
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)  
STDEVP(column)  
SUM(column) 返回某列的总和
VAR(column)  
VARP(column)  

在 SQL Server 中的合计函数

函数描述
AVG(column) 返回某列的平均值
BINARY_CHECKSUM  
CHECKSUM  
CHECKSUM_AGG  
COUNT(column) 返回某列的行数(不包括NULL值)
COUNT(*) 返回被选行数
COUNT(DISTINCT column) 返回相异结果的数目
FIRST(column) 返回在指定的域中第一个记录的值(SQLServer2000 不支持)
LAST(column) 返回在指定的域中最后一个记录的值(SQLServer2000 不支持)
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)  
STDEVP(column)  
SUM(column) 返回某列的总和
VAR(column)  
VARP(column)  

Scalar 函数

Scalar 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值。

MS Access 中的 Scalar 函数

函数描述
UCASE(c) 将某个域转换为大写
LCASE(c) 将某个域转换为小写
MID(c,start[,end]) 从某个文本域提取字符
LEN(c) 返回某个文本域的长度
INSTR(c,char) 返回在某个文本域中指定字符的数值位置
LEFT(c,number_of_char) 返回某个被请求的文本域的左侧部分
RIGHT(c,number_of_char) 返回某个被请求的文本域的右侧部分
ROUND(c,decimals) 对某个数值域进行指定小数位数的四舍五入
MOD(x,y) 返回除法操作的余数
NOW() 返回当前的系统日期
FORMAT(c,format) 改变某个域的显示方式
DATEDIFF(d,date1,date2) 用于执行日期计算

以上是关于sql 函数的主要内容,如果未能解决你的问题,请参考以下文章

SQL---CONCAT系列函数

sql 函数

常用的sql函数

sql 语句中那些是聚合函数?

sql中如何写函数

SQL函数