标题:请教高手,编写了一个函数,运行结果很奇怪
取消只看楼主
zy20006
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-3-27
结帖率:100%
已结贴  问题点数:20 回复次数:3 
请教高手,编写了一个函数,运行结果很奇怪
函数如下:
Create function [dbo].[fn_hexStrToChar](@hexstr nvarchar(1024))
returns nvarchar
begin
    declare
    @str nvarchar(255),
    @result nvarchar(255),
    @len int,
    @bit int
    set @str = ''
    set @len = LEN(@hexstr)
    set @bit = 3
    while @bit < @len
    begin
        set @str = @str + nchar([dbo].[hextoint](SUBSTRING(@hexstr,@bit,4)))
        set @bit = @bit + 6
    end
    return @str
end

该函数作用是传入一个16进制的字符串,返回与之对应的Unicode字符串
比如:select dbo.fn_hexStrToChar('\u4e2d\u6587\u8f6c\u6362')
执行后应返回“中文转换”。
但是只返回“中”,测试过任何输入都只返回第一个字符。
请教各位高手指点。
住:[dbo].[hextoint]这是另一个函数,作用是单个16进制字符转换。
2017-03-27 09:53
zy20006
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-3-27
得分:0 
回复 2楼 mywisdom88
Create  function [dbo].[hextoint](@s varchar(16))
returns bigint  
begin
 declare @result bigint
 set @result=CONVERT(bigint, CONVERT(varbinary, CAST(N'0x' + @s AS char), 1))
 return @result
END
2017-03-28 09:45
zy20006
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-3-27
得分:0 
回复 2楼 mywisdom88
已经发了,但是应该不是这个问题。我试过甩开这个函数,只读取输入的字符串,也是不行。
2017-03-28 09:51
zy20006
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-3-27
得分:0 
回复 4楼 zy20006
多谢了,问题已经找到了。
是因为函数中定义返回类型时没有标明长度,所以默认就是只有1位。
2017-03-28 10:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475528-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101724 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved