2008-10-20 75 views
11

爲十六進制我正在尋找一種方式來改變一個真正的字符串轉換成它在SQL十六進制值。我在尋找的東西是Informix的友好,但我顯然會喜歡的東西數據庫中立將字符串轉換成在SQL

這是我現在使用的選擇:

SELECT SomeStringColumn from SomeTable 

這裏是選擇我想用: 從SomeTable

遺憾的是沒有選擇HEX(SomeStringColumn)是一種簡單的... Informix的給我留言: 字符到數字轉換錯誤

有什麼想法?

+1

Hex函數是一個整數(或INT8或BIGINT)轉換爲十六進制字符串。你在尋找什麼作爲HEX_STRING(「xyz」)的輸出? – 2008-10-21 15:35:34

+0

另外,選擇一個答案是有禮貌的 - 或者如果沒有回答你的問題,編輯你的問題是可以理解的,這樣才能理解。你應該瞄準選擇一個最好的答案 - 請。 – 2008-10-24 23:33:23

+0

你應該改寫你的問題。顯然你不想把字符串解釋爲數字(「12」 - > 12)。看來你想要將底層字節轉換爲十六進制。 (「abc」 - > hex)。你想要ASCII碼,Unicode還有其他的東西嗎?請明確點。 – colithium 2009-06-28 03:09:15

回答

17

您可以用演員和fn_varbintohexstr?

​​

我不確定您的數據庫系統中是否具有該功能,它在MS-SQL中。

我只是想在我SQL服務器MMC我的表之一:

SELECT  master.dbo.fn_varbintohexstr(CAST(Addr1 AS VARBINARY)) AS Expr1 
FROM   Customer 

這和預期一樣。可能是我所知道的在MS-SQL master.dbo.fn_varbintohexstr什麼,可能是類似於Informix的十六進制()函數,因此可能嘗試:

SELECT  hex(CAST(Addr1 AS VARBINARY)) AS Expr1 
FROM   Customer 
0

如果有可能爲你做這在數據庫客戶端代碼可能會更容易。

否則,錯誤可能意味着,當你想到建於十六進制的功能不能與你的價值觀工作。我會仔細檢查輸入值是否被修剪,並且首先以格式,這可能很簡單。然後,我會徵詢描述十六進制的功能數據庫文檔,看看它的預期投入將和比較,您的一些價值觀,並找出區別是什麼,以及如何改變你的價值觀相匹配的預期投入。

一個簡單的谷歌搜索「Informix的十六進制功能」提出了第一個結果頁面的一句話:「必須是文字整數或返回一個整數一些其他的表達」。如果你的數據類型是一個字符串,首先將字符串轉換爲一個整數。看起來你乍看之下你做了一些與演員功能(我不知道這一點)。

select hex(cast SomeStringColumn as int)) from SomeTable 
0

怎麼樣:

declare @hexstring varchar(max); 
set @hexstring = 'E0F0C0'; 
select cast('' as xml).value('xs:hexBinary(substring(sql:variable("@hexstring"), sql:column("t.pos")))', 'varbinary(max)') 
from (select case substring(@hexstring, 1, 2) when '0x' then 3 else 0 end) as t(pos) 

我看到這個在這裏: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

Sorrry,這項工作只能在> MS SQL 2005

0

舊的文章,但對我來說我也必須刪除十六進制的0x部分,所以我使用下面的代碼。 (我使用MS SQL)

convert(varchar, convert(Varbinary(MAX), YOURSTRING),2)