我创建了一个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输出
答案 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个数字。