SQLで本物の文字列を16進値に変換する方法を探しています。 Informixに適したものを探していますが、データベースに依存しないものを明らかに望んでいます
これが私が今使っているセレクトです:
SELECT SomeStringColumn from SomeTable
使用したい選択は次のとおりです。SELECThex(SomeStringColumn)from SomeTable
残念ながら、それほど単純なものはありません... Informixは私にそのメッセージを与えます:文字から数値への変換エラー
何か案が?
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
OLD Postですが、私の場合、16進数の0x部分も削除する必要があったため、以下のコードを使用しました。 (私はMS SQLを使用しています)
convert(varchar, convert(Varbinary(MAX), YOURSTRING),2)
何について:
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)
申し訳ありませんが、これは> MS SQL2005でのみ機能します
データベースクライアントでコードを使用してこれを実行できる場合は、より簡単な場合があります。
それ以外の場合、エラーはおそらく、組み込みの16進数関数が期待どおりに値を処理できないことを意味します。入力値がトリミングされていることを再確認します。最初の形式では、それはとても単純かもしれません。次に、16進数の関数について説明しているデータベースのドキュメントを調べて、予想される入力が何であるかを確認し、それをいくつかの値と比較して、違いと、予想される入力と一致するように値を変更する方法を見つけます。
「informixhexfunction」をグーグルで検索すると、最初の結果ページに「リテラル整数または整数を返すその他の式である必要があります」という文が表示されました。データ型が文字列の場合、最初に文字列を整数に変換します。一見、キャスト関数で何かをしているように見えます(これについてはよくわかりません)。
select hex(cast SomeStringColumn as int)) from SomeTable