2013-04-25 64 views
2

我創建了一個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

回答

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

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 
0

在Oracle中,

只是執行to_number函數。

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

就是這樣。它會返回171號碼。