首页 新闻 会员 周边 捐助

SQL自定义函数中调用CAST('汉字' as Binvary)跟直接调用的结果为什么不一样

0
悬赏园豆:10 [已解决问题] 解决于 2014-12-19 13:03

      在SQLServer中,需要获得中文汉字GB2312编码的十六进制代码,能够通过CAST('汉字' as Binvary)然后转换获得。

但在自定义函数中用同样的方法,返回的却是不一样的代码。

这是什么原因?怎么解决?

运行环境:win8.1简体中文版 + SQL Server2012简体中文版

 

自定义函数如下:

CREATE FUNCTION [dbo].[fn_CastTest](@Input NVARCHAR(100))

RETURNS VARCHAR(200)

AS

BEGIN

    RETURN master.sys.fn_varbintohexsubstring(0,CAST(@Input AS VARBINARY),1,0);

END

--测试:

SELECT [dbo].[fn_CastTest]('汉字');

SELECT master.sys.fn_varbintohexsubstring(0,CAST('汉字' AS VARBINARY),1,0) AS [Direct];

 

/****返回结果****

    496c575b

    babad7d6

****************/

sealine的主页 sealine | 初学一级 | 园豆:193
提问于:2014-12-19 11:09
< >
分享
最佳答案
0

把你的函数入参修改为varchar类型,或者直接调用时加上N'汉字',怀疑是编码问题。

收获园豆:10
幻天芒 | 高人七级 |园豆:37205 | 2014-12-19 11:55

正解,谢谢!

修改后OK!

sealine | 园豆:193 (初学一级) | 2014-12-19 13:01

修改输入参数类型为  @Input VARCHAR(100) 就OK了! 

sealine | 园豆:193 (初学一级) | 2014-12-19 13:07

@sealine: 嗯。呵呵~

幻天芒 | 园豆:37205 (高人七级) | 2014-12-19 15:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册