SQL Server转换十六进制的varchar值INT

问题描述:

我创建了一个T-SQL函数SQL Server转换十六进制的varchar值INT

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') 

我的功能我得到一个错误:

Conversion failed when converting the varchar value '0x0000385A' to data type int.

请纠正我。

[编辑]
我想INT输出

+0

感谢您编辑我的问题@marc_s – 2013-04-25 08:14:26

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 
+0

copypaste更新您现有的功能。注意数据库在使用中(确保在添加:“USE [yourDBname] {new line} GO”之前更改 – 2013-04-25 08:22:37

+0

非常感谢,@Mark – 2013-04-25 08:37:33

+0

Pleasure @FrankMyatThu;) – 2013-04-25 08:37:54

尝试这一个 -

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 

在Oracle中,

只是执行to_number函数。

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

就是这样。它会返回171号码。