当前位置: 代码迷 >> Sql Server >> 函数中调用CAST()和直接调用的结果为什么不一样
  详细解决方案

函数中调用CAST()和直接调用的结果为什么不一样

热度:22   发布时间:2016-04-24 09:33:55.0
函数中调用CAST()跟直接调用的结果为什么不一样
需要获得中文汉字GB2312编码的十六进制代码,能够通过CAST('汉字' as Binvary)然后转换获得。
但在自定义函数中用同样的方法,返回的却是不一样的代码。
这是什么原因?怎么解决?

自定义函数如下:

IF OBJECT_ID(N'dbo.fn_CastTest',N'FN') IS NOT NULL
        DROP FUNCTION dbo.fn_CastTest;

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

AS
BEGIN
        DECLARE @binStr VARBINARY(400);
        DECLARE @HexStr VARCHAR(400);
    
        SET @binStr=cast(@Input as VARBINARY);
        SET @HexStr=master.sys.fn_varbintohexsubstring(0,@binStr,1,0);
        RETURN @HexStr;
END

--测试:
SELECT [dbo].[fn_CastTest]('汉字') AS [Function], master.sys.fn_varbintohexsubstring(0,CAST('汉字' AS VARBINARY),1,0) AS [Direct]

/*
返回结果:
    Function      Direct
    496c575b    babad7d6
*/
------解决思路----------------------
字符串类型(或者说编码)不一样啊!
'汉字' 是 char()、@Input 是 varchar()。
------解决思路----------------------
应该要修改后者吧
SELECT [dbo].[fn_CastTest](N'汉字') AS [Function], master.sys.fn_varbintohexsubstring(0,CAST(N'汉字' AS VARBINARY),1,0) AS [Direct]
  相关解决方案