商城首页欢迎来到中国正版软件门户

您的位置:首页 > 软件教程 >创建一个用TransactSQL语句实现阶乘的函数

创建一个用TransactSQL语句实现阶乘的函数

  发布于2025-01-29 阅读(0)

扫一扫,手机访问

用TransactSQL语句创建一个阶乘的函数!

用TransactSQL语句创建一个阶乘的函数!

展开全部

居然用SQL这种集合操作语言,来做类C的函数式语言的事(虽然是可以的):(

现在的老师也太无聊了,估计自己很少真正使用SQL。

/*-- =============================================

-- Author: Yew

-- Create date: 2016-10-26

-- Description: 计算阶乘

-- test Code-------------

SELECT dbo.uf_Factorial(-1)

SELECT dbo.uf_Factorial(0)

SELECT dbo.uf_Factorial(1)

SELECT dbo.uf_Factorial(10)

SELECT dbo.uf_Factorial(33) -- 会否溢出?

----History-----------------

-- =============================================*/

ALTER FUNCTION dbo.uf_Factorial(

@N INT

) RETURNS BIGINT

AS

BEGIN

IF @N RETURN NULL -- RAISERROR(N'参数N 不能为负')

IF @N = 0

RETURN 1

RETURN dbo.uf_Factorial(@N - 1) * @N --递归

END

GO

编一个PLSQL函数或过程功能

1、存储过程如下:

create or replace procedure pro_parse_string(

a_SourceString IN VARCHAR2, --源字符串

a_Delimiter IN VARCHAR2 --拆分的分隔符

) is

iBegin INTEGER;

sValue VARCHAR2(200);

sSplitString VARCHAR2(1000);

BEGIN

--检查参数

IF a_SourceString IS NULL OR a_Delimiter IS NULL THEN

RETURN;

END IF;

IF a_SourceString = '' THEN

RETURN;

END IF;

IF instr(a_SourceString,a_Delimiter) = 0 THEN

dbms_output.put_line(a_SourceString);

RETURN;

END IF;

sSplitString := a_SourceString;

LOOP

iBegin := INSTR(sSplitString,a_Delimiter);

EXIT WHEN iBegin sValue := Substr(sSplitString,1,iBegin - 1);

sSplitString := SubStr(sSplitString,iBegin + 1);

dbms_output.put_line(sValue);

IF sSplitString IS NULL THEN

EXIT;

END IF;

END LOOP;

--Set last entry

sSplitString := SubStr(sSplitString, iBegin);

--Update array and counter if necessary

IF Length(sSplitString) >0 THEN

dbms_output.put_line(sSplitString);

END IF;

end pro_parse_string;

2、输入变量测试:

exec pro_parse_string('1,2,10,123,1,121212',',');

自己编写sql函数

create function [dbo].[Get_StrArrayStrOfIndex]

(

@str varchar(1024), --要分割的字符串

@split varchar(10), --分隔符号

@index int --取第几个元素

)

returns varchar(1024)

as

begin

declare @location int

declare @start int

declare @next int

declare @seed int

set @str=ltrim(rtrim(@str))

set @start=1

set @next=1

set @seed=len(@split)

set @location=charindex(@split,@str)

while @location0 and @index>@next

begin

set @start=@location+@seed

set @location=charindex(@split,@str,@start)

set @next=@next+1

end

if @location =0 select @location =len(@str)+1

--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。

return substring(@str,@start,@location-@start)

end

使用举例:

select id,code=dbo.Get_StrArrayStrOfIndex(code,'.',4) from code_table

本文转载于:https://www.docexcel.net/show/24_142940.html 如有侵犯,请联系admin@zhengruan.com删除

热门关注