2011-01-11 32 views
6

CAST()は、DATETIME、DECIMAL、TIME、SIGNED、UNSIGNEDの場合は、BINARY、CHAR、DATEでのみ機能するようです。私はBIGINTに16進文字列を変換する必要がありMySQLで型をbigintにキャストするにはどうすればよいですか?

は、つまり、私がしたいと思います:

SELECT CAST(CONV("55244A5562C5566354',16,10) AS BIGINT) 

はCONV()私は変換にそれをしようとしている理由ですので、文字列を返します。私はこのために2つの用途があります。

  • データを挿入しています。 INSERT INTO a(foo) SELECT CONV(bar,16,10) FROM ...ここで、fooはbigintカラムです。barはvarcharです。おそらく、私は選択文が文字列であり、MySQLがそれを世話するようにすることができますか?(SELECT CONV(bar,16,10))それを文字列として扱います。

答えて

17
SELECT CAST(CONV('55244A5562C5566354',16,10) AS UNSIGNED INTEGER); 
+4

これはbigint /何に変換されますか?私は "普通の"整数のオーバーフローについて心配する必要はありませんか? – Anonym

+2

@Anonym: '5.1'では、' CAST ... AS UNSIGNED'は常に 'BIGINT'を返します。 – Quassnoi

+0

それはどこに文書化されていますか? – will

2

問題のようですか? 64ビットと32ビットの両方のシステムでこの変換をテストしました。正常に動作します。 16進からビンへの変換を行う代わりに、その数値を16進数として扱うことができます。

mysql> SELECT CAST(X'55244A5562C5566354' AS UNSIGNED); 
+-----------------------------------------+ 
| CAST(X'55244A5562C5566354' AS UNSIGNED) | 
+-----------------------------------------+ 
|      2614996416347923284 | 
+-----------------------------------------+ 
1 row in set (0.00 sec) 
+1

キャスト( '2'はBIGINT) - > _構文エラー_ ...が問題です – will

関連する問題