1

、または整数VARCHARにしたいタイプのデータの列があります(私の最終目標は、すべてのデータポイントを整数にすることです)。ただし、私が試みるすべてのクエリは、 の値を返します。CONVERTCAST0

私のデータは次のようになります。

1
2
3
4
5

次のクエリのいずれかを実行すると:

SELECT CONVERT(data, BINARY) FROM table
SELECT CONVERT(data, CHAR) FROM table

私の結果は次のとおりです。

1
2
3
4
5

そこに驚きはありません。ただし、これらのクエリのいずれかを実行すると、次のようになります。

SELECT CONVERT(data, UNSIGNED) FROM table
SELECT CONVERT(data, SIGNED) FROM table

私の結果は次のとおりです。

0
0
0
0
0

SOとGoogleでこの問題の答えを探しましたが、運が悪かったので、ここでプロを試してみようと思いました.

編集/更新

コメントからの提案に対していくつかの追加クエリを実行しました。結果は次のとおりです。

data LENGTH(data) LENGTH(TRIM(data)) ASCII(data)
1    3            3                  0
2    3            3                  0
3    3            3                  0
4    3            3                  0
5    3            3                  0

データ自体に問題があるようです。この投稿に出くわした人のために: この時点での私の解決策はTRIM、データ ポイントから超過してCONVERTからUNSIGNED. 助けてくれてありがとう!

さらに編集/更新

少し調べたところNULL、データに隠しバイトがあることがわかりました。この質問への回答が役に立ちました: MySQL で SELECT を使用してパディングされた NULL バイトを削除するにはどうすればよいですか?

4

4 に答える 4

1

何をSELECT data, LENGTH(data), LENGTH(TRIM(data)), ASCII(data) FROM table返しますか?数値文字列が単なる数値文字列ではない可能性があります。

または、マルチバイト文字エンコーディングを使用していますか?

于 2014-12-02T18:16:32.013 に答える
1

あなたが持っているクエリは問題ないと思います。私にとってはうまくいった:sqlfiddle.com/#!2/a15ec4/1/3.

データに問題があると思います。データのどこかに改行やスペースがありませんか?

データに対して長さまたは ascii を実行して、予想以上のものがあるかどうかを確認することで、データを確認できます。

select ascii(data) from foo where ascii(data) not between 48 and 57また

select length(data) as mLEN from table having mlen>1長さのために。

于 2014-12-02T18:28:09.860 に答える
0

これが正しい形式だと思います:

SELECT CAST(data AS UNSIGNED) FROM test;
SELECT CAST(data AS SIGNED) FROM test;

ここでテスト: http://sqlfiddle.com/#!8/8c481/1

于 2014-12-01T21:36:14.350 に答える
0

これらの構文を試してください

SELECT CONVERT(data, UNSIGNED INTEGER) FROM table

また

SELECT CAST(data AS UNSIGNED) FROM table
于 2014-12-01T21:37:19.413 に答える