VARCHARからINTへのキャスト-MySQL


267

私の現在のデータ

SELECT PROD_CODE FROM `PRODUCT`

です

PROD_CODE
2
5
7
8
22
10
9
11

4つのクエリをすべて試しましたが、どれも機能しません。(参照

SELECT CAST(PROD_CODE) AS INT FROM PRODUCT;

SELECT CAST(PROD_CODE AS INT) FROM PRODUCT;

SELECT CAST(PROD_CODE) AS INTEGER FROM PRODUCT;

SELECT CAST(PROD_CODE AS INTEGER) FROM PRODUCT;

すべてが以下のような構文エラーをスローします。

SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、 ')AS INT FROM PRODUCT LIMIT 0、30'の1行目付近で使用する正しい構文を確認してください。

SQL構文にエラーがあります。1行目の「INTEGER)FROM PRODUCT LIMIT 0、30」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

MySQLでvarcharを整数にキャストするための正しい構文は何ですか?

MySQLバージョン:5.5.16


試行ごとにどのエラーが報告されますか?あなたのインプットは何ですか?だはずキャストが結果セットの任意のレコードのために失敗した場合、クエリを失敗します。MySqlは標準の安全規則に違反していることで有名ですが、少なくとも、それがsql標準に書かれていることです。そして、記録のために、リストされた2番目と4番目のサンプルは正しいです。
Joel Coehoorn、2012

回答:


552

キャスト関数と演算子で説明されているように:

結果のタイプは、次のいずれかの値になります。

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

したがって、以下を使用する必要があります。

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT

7
署名なしが機能しています。MySQLはいつから整数データ型を符号なしに変更しましたか?
レーニンラージラジャセカラン2012

20
@emaillenin:キャストのデータ型は列のデータ型と同じではありません。整数の符号付きかどうかなど、データの解釈方法に関する追加情報が必要なためです。
eggyal 2012

13
この情報をありがとう。MySQLのドキュメントは私にとって混乱しているので、これは非常に役に立ちました。
ラッキー

私はその後、私はDECIMAL(10,2)にそれを変更し、それが働いた。.. CAST(num_colのAS DOUBLE(10,2)で問題が発生したTnanks。
ナバBogatee

MariaDBでは問題なくCAST(PROD_CODE AS INT) 動作することに注意してください。
Paul Spiegel、

57

varcharフィールド/値を数値形式にキャストするには、ほとんどハックを使用できます。

SELECT (`PROD_CODE` * 1) AS `PROD_CODE` FROM PRODUCT`

9
簡単で文書化され、サポートされ、推奨されるソリューションがあるのに、なぜそのような「ハック」を使用するのでしょうか。
eggyal

31
@eggyal TL; DR:あなたが言及している「ハック」は、簡単で文書化された推奨ソリューションです。- - - - - - - - - - - - - ロングバージョン:から手動To cast a string to a number, you normally need do nothing other than use the string value in numeric context私は使用したいが、+0代わりの*1追加が速いため。
Mindwin 2016年

8
@BrianStinar受け入れられた回答は、より良いセマンティクスのソリューションが存在することを明確に示していますが、特に文字列と数値型を組み合わせる場合、プリミティブ値が暗黙的に別のプリミティブにキャストされると便利な場合があります。したがって、この機能が存在するためにプログラミング言語をランダムにバッシングすることは、かなり不適切に思えます。
B12Toaster 2018

このタイプのハックは使用しないでください。-コードがこれらでいっぱいになり、元に戻すのが難しいときに、後で遅くなる非常に悪い習慣

この答えで私は時々float64で終わるのを見つけました。それがなぜ私が使うことを好むのでしょうCONVERT('123456',UNSIGNED INTEGER)
Yitzchak Weingarten
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.