web-dev-qa-db-ja.com

SQLで文字列をHEXに変換する

SQLで本物の文字列を16進値に変換する方法を探しています。 Informixに適したものを探していますが、データベースに依存しないものを明らかに望んでいます

これが私が今使っているセレクトです:

SELECT SomeStringColumn from SomeTable

使用したい選択は次のとおりです。SELECThex(SomeStringColumn)from SomeTable

残念ながら、それほど単純なものはありません... Informixは私にそのメッセージを与えます:文字から数値への変換エラー

何か案が?

11
Claude Houle

Castとfn_varbintohexstrを使用できますか?

SELECT master.dbo.fn_varbintohexstr(CAST(SomeStringColumn AS varbinary)) 
FROM SomeTable

データベースシステムにその機能があるかどうかはわかりませんが、MS-SQLにあります。

SQLサーバーで試してみましたMMCテーブルの1つ:

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

これは期待どおりに機能しました。 MS-SQLでmaster.dbo.fn_varbintohexstrとして知っているものは、informix hex()関数に類似している可能性があるため、次のように試してください。

SELECT     hex(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer
18
stephenbayer

OLD Postですが、私の場合、16進数の0x部分も削除する必要があったため、以下のコードを使用しました。 (私はMS SQLを使用しています)

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

0
gusmundo

何について:

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

申し訳ありませんが、これは> MS SQL2005でのみ機能します

0
Boklucius

データベースクライアントでコードを使用してこれを実行できる場合は、より簡単な場合があります。

それ以外の場合、エラーはおそらく、組み込みの16進数関数が期待どおりに値を処理できないことを意味します。入力値がトリミングされていることを再確認します。最初の形式では、それはとても単純かもしれません。次に、16進数の関数について説明しているデータベースのドキュメントを調べて、予想される入力が何であるかを確認し、それをいくつかの値と比較して、違いと、予想される入力と一致するように値を変更する方法を見つけます。

「informixhexfunction」をグーグルで検索すると、最初の結果ページに「リテラル整数または整数を返すその他の式である必要があります」という文が表示されました。データ型が文字列の場合、最初に文字列を整数に変換します。一見、キャスト関数で何かをしているように見えます(これについてはよくわかりません)。

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