15

何かをより大きなサイズのデータ​​型からより小さなサイズのデータ​​型に変換したいのは、非正統的であり、潜在的に危険であることを私は知っています。ただし、この場合、列の値がBIGINT UNSIGNED列の最大サイズを超えることはほとんどありませんINT

そこで、MySQL を使用して、テーブル構造を読み取っています。コラムを読んinformation_schema.columns.ordinal_positionでいるうちに、タイプであることがわかりBIGINT UNSIGNEDました。今、私はこれINTを私の処理目的の代わりにしたい. SQL で型をキャスト/変換したい。

CAST明らかにCONVERT、データ型の符号を変更することだけを許可します。

SELECT CAST(ordinal_position AS SIGNED)
FROM information_schema.columns

列を具体的に として返す必要がありますINT。たとえば、an の最大値で列を切り取り、INTその値を返します。

今のところ、値を元に戻した後でデータ型を変更します。しかし、SQLでそれを行う方法を知りたいです。

4

3 に答える 3

9

この記事には解決策があるようです:

変換を実行する関数を作成します。

CREATE FUNCTION BigToInt (n BIGINT) RETURNS INTEGER RETURN n;

ご覧のとおり、この関数は非常に短く単純です。BIGINT を受け取り、すぐにそれを通常の整数として返します。ただし、これの 1 つの結果は、一部のデータが Int の可能な最大値に切り捨てられることです。

(おそらく、署名に「UNSIGNED」を追加できます-そうでない場合でも、署名されていない部分を削除するすでに持っているキャストと組み合わせることができます)。

于 2012-07-21T20:03:32.533 に答える