自定义函数对一窜数字进行降序排序

目木目_ 2018-06-04 01:37:56
create function qqq(@n varchar(100))
returns varchar(100)
as begin
declare @a int set @a=2
declare @aa int set @aa=1
declare @c varchar(100)
declare @b varchar(100) declare @bb varchar(100)
declare @d int set @d=LEN(@n)
while @a<=@d begin
set @b = substring(@n,@a,1)
while @aa<@a begin
set @bb = substring(@n,@aa,1)
if(@b>@bb) begin
select REPLACE(@n,@b,@bb)
select REPLACE(@n,@bb,@b)
set @aa=@aa+1
end
set @a=@a+1
end
set @c=@n
end return @c
end

提示错误为函数中含有的 SELECT 语句无法向客户端返回数据。
...全文
549 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2018-06-04
  • 打赏
  • 举报
回复
引用 5 楼 qq_42381520 的回复:
[quote=引用 3 楼 qq_37170555 的回复:] 你这样说我也不能肯定会不会, 这个得看你自己要做什么,你要明白While什么意思,你那样写会不会死循环。
简单来说 我就是想用SQL来实现C语言中的冒泡法来排序。[/quote] 这个你可以自己慢慢摸索一下,反正这个问题的语法错误是帮你找到了,你说的冒泡排序,你可以好好研究下
目木目_ 2018-06-04
  • 打赏
  • 举报
回复
引用 3 楼 qq_37170555 的回复:
你这样说我也不能肯定会不会, 这个得看你自己要做什么,你要明白While什么意思,你那样写会不会死循环。
我想要用自定义函数来对一串数字进行降序排列 我发现我的代码里 如果一串数字里 出现了多个一样的数字 就会被replace全部给替换掉。 但这需要怎么解决?
目木目_ 2018-06-04
  • 打赏
  • 举报
回复
引用 3 楼 qq_37170555 的回复:
你这样说我也不能肯定会不会, 这个得看你自己要做什么,你要明白While什么意思,你那样写会不会死循环。
简单来说 我就是想用SQL来实现C语言中的冒泡法来排序。
听雨停了 2018-06-04
  • 打赏
  • 举报
回复
引用 2 楼 qq_42381520 的回复:

CREATE FUNCTION qqq
(
	@n VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
	DECLARE @a INT                 
	SET @a = 2
	DECLARE @aa INT                
	SET @aa = 1
	DECLARE @c VARCHAR(100)        
	DECLARE @b VARCHAR(100)            
	DECLARE @bb VARCHAR(100)     
	DECLARE @d INT                 
	SET @d = LEN(@n)
	WHILE @a <= @d
	BEGIN
	    SET @b = SUBSTRING(@n, @a, 1) 
	    WHILE @aa < @a
	    BEGIN
	        SET @bb = SUBSTRING(@n, @aa, 1) 
	        IF (@b > @bb)
	        BEGIN
	            set @n=REPLACE(@n, @b, @bb)
	            SET @n= REPLACE(@n, @bb, @b)
	            SET @aa = @aa + 1
	        END
	        
	        SET @a = @a + 1
	    END 
	    SET @c = @n
	END 
	RETURN @c
END
改成这样就可以了,但好像你里面的逻辑有点问题。你可以看看我下面的分析,我也不太确定是不是这个意思哈

 WHILE @aa < @a	--直接死循环了,@aa永远比@a小1
	    BEGIN
	        SET @bb = SUBSTRING(@n, @aa, 1) 
	        IF (@b > @bb)
	        BEGIN
	            set @n=REPLACE(@n, @b, @bb)
	            SET @n= REPLACE(@n, @bb, @b)
	            SET @aa = @aa + 1		--就算@b>@bb成立,刚开始@aa也就从1变成了2
	        END
	       END   
	        SET @a = @a + 1	--@a加1又变成了3,然后While @aa < @a一直循环下去了,因为2永远小于3,3永远小于4。。。。。
	   
那把end的位置调节一下是不是就不会陷入死循环了?
你这样说我也不能肯定会不会, 这个得看你自己要做什么,你要明白While什么意思,你那样写会不会死循环。
目木目_ 2018-06-04
  • 打赏
  • 举报
回复

CREATE FUNCTION qqq
(
	@n VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
	DECLARE @a INT                 
	SET @a = 2
	DECLARE @aa INT                
	SET @aa = 1
	DECLARE @c VARCHAR(100)        
	DECLARE @b VARCHAR(100)            
	DECLARE @bb VARCHAR(100)     
	DECLARE @d INT                 
	SET @d = LEN(@n)
	WHILE @a <= @d
	BEGIN
	    SET @b = SUBSTRING(@n, @a, 1) 
	    WHILE @aa < @a
	    BEGIN
	        SET @bb = SUBSTRING(@n, @aa, 1) 
	        IF (@b > @bb)
	        BEGIN
	            set @n=REPLACE(@n, @b, @bb)
	            SET @n= REPLACE(@n, @bb, @b)
	            SET @aa = @aa + 1
	        END
	        
	        SET @a = @a + 1
	    END 
	    SET @c = @n
	END 
	RETURN @c
END
改成这样就可以了,但好像你里面的逻辑有点问题。你可以看看我下面的分析,我也不太确定是不是这个意思哈

 WHILE @aa < @a	--直接死循环了,@aa永远比@a小1
	    BEGIN
	        SET @bb = SUBSTRING(@n, @aa, 1) 
	        IF (@b > @bb)
	        BEGIN
	            set @n=REPLACE(@n, @b, @bb)
	            SET @n= REPLACE(@n, @bb, @b)
	            SET @aa = @aa + 1		--就算@b>@bb成立,刚开始@aa也就从1变成了2
	        END
	       END   
	        SET @a = @a + 1	--@a加1又变成了3,然后While @aa < @a一直循环下去了,因为2永远小于3,3永远小于4。。。。。
	   
那把end的位置调节一下是不是就不会陷入死循环了?
听雨停了 2018-06-04
  • 打赏
  • 举报
回复

CREATE FUNCTION qqq
(
	@n VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
	DECLARE @a INT                 
	SET @a = 2
	DECLARE @aa INT                
	SET @aa = 1
	DECLARE @c VARCHAR(100)        
	DECLARE @b VARCHAR(100)            
	DECLARE @bb VARCHAR(100)     
	DECLARE @d INT                 
	SET @d = LEN(@n)
	WHILE @a <= @d
	BEGIN
	    SET @b = SUBSTRING(@n, @a, 1) 
	    WHILE @aa < @a
	    BEGIN
	        SET @bb = SUBSTRING(@n, @aa, 1) 
	        IF (@b > @bb)
	        BEGIN
	            set @n=REPLACE(@n, @b, @bb)
	            SET @n= REPLACE(@n, @bb, @b)
	            SET @aa = @aa + 1
	        END
	        
	        SET @a = @a + 1
	    END 
	    SET @c = @n
	END 
	RETURN @c
END
改成这样就可以了,但好像你里面的逻辑有点问题。你可以看看我下面的分析,我也不太确定是不是这个意思哈

 WHILE @aa < @a	--直接死循环了,@aa永远比@a小1
	    BEGIN
	        SET @bb = SUBSTRING(@n, @aa, 1) 
	        IF (@b > @bb)
	        BEGIN
	            set @n=REPLACE(@n, @b, @bb)
	            SET @n= REPLACE(@n, @bb, @b)
	            SET @aa = @aa + 1		--就算@b>@bb成立,刚开始@aa也就从1变成了2
	        END
	        
	        SET @a = @a + 1	--@a加1又变成了3,然后While @aa < @a一直循环下去了,因为2永远小于3,3永远小于4。。。。。
	    END 

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧