SQL Server将十六进制varchar值转换为INT

时间:2013-04-25 08:10:45

标签: sql-server

我创建了一个T-SQL函数

CREATE FUNCTION dbo.GetDecimalFromHexa (@HexValue VARCHAR(10))
RETURNS INT
BEGIN
   IF (CHARINDEX('0x',@HexValue) = 0)
      SET @HexValue = '0x' + @HexValue
   RETURN CONVERT(INT, @HexValue )    
END

然后我就像那样调用我的功能

SELECT dbo.GetDecimalFromHexa ('0000385A')

我收到错误:

  

将varchar值'0x0000385A'转换为数据类型int时,转换失败。

请纠正我。

[编辑]
我想得到int输出

3 个答案:

答案 0 :(得分:4)

ALTER FUNCTION [dbo].[GetDecimalFromHexa] (@HexValue VARCHAR(10))
RETURNS INT
BEGIN
   IF (CHARINDEX('0x',@HexValue) = 0)
      SET @HexValue = CONCAT ('0x', @HexValue)
   RETURN CONVERT(INT, CONVERT(varbinary, @HexValue, 1))    
END
GO

答案 1 :(得分:0)

试试这个 -

SELECT CAST(CONVERT(VARBINARY(4), '0000385A', 2) AS INT)

或试试这个 -

CREATE FUNCTION dbo.GetDecimalFromHexa 
(
    @HexValue VARCHAR(10)
)
RETURNS INT
BEGIN

   RETURN CAST(CONVERT(VARBINARY(4), @HexValue, 2) AS INT)

END

答案 2 :(得分:0)

在Oracle中,

只需执行to_number功能。

SELECT TO_NUMBER('AB','xx') FROM dual

那就是它。它将返回171个数字。