2011/03/08

[MySQL] 文字列を数値に変換する方法

Oracleには、TO_NUMBERという変換する関数がありますが、
MySQLには文字列を数値に変換する関数がありません。

ですので、文字列フィールドに1〜100までデータが登録されている場合に、
以下のクエリを実行すると。。。

■クエリ
select max(col1) from test_tbl;
■結果
99

上記のクエリだと、test_tblの中から一番大きい文字列を検索します。
一番大きい文字列は「100」ではなく、「99」なのでこのような結果となります。

数値としての最大値を取得するには、文字列フィールドを数値に変換する必要があります。
やり方は2通りあります。(もっとありそうですけどね。)

1.暗黙的な型変換を利用する方法

文字列フィールドに対して算術演算をすると、暗黙的に数値へ変換されます。
これを利用して、数値に変換し最大値を算出します。

先ほどのクエリに対して、この方法を実施すると。。。
■クエリ
select max(col1+0) from test_tbl;
■結果
100

上記のように暗黙的に数値変換されてから最大値が算出されるので、
数値としての最大値100が結果として取得できます。

2.CAST関数を利用する方法

上記1の方法でもできますが、プログラムのあちこちに上記のような暗黙変換するようなロジックがあるのは、個人的に気持ち悪いです。
あのようなコードがあると、プログラムの見通しも悪くなりますしね。

そこで、CAST関数を利用して明示的に変換する方法について説明します。

CAST関数を使用するとこのようなクエリになります。
■クエリ
select max(cast(col1 as SIGNED)) from test_tbl;
■結果
100

SIGNEDを指定して、col1を整数に変換しています。
SIGNEDの他にも色々オプションがあるようです。

0 件のコメント:

コメントを投稿