tamulab.jp

tamulabはプログラミングのtipsやインターネット上で気になったことなどを書いてます

[MySQL] 文字列型のカラムに入った数字で MAX() する時の注意

calendar

reload

view 3,989 views

とある事情により、数字 or NULL だけしか入らないだろうと想定されるカラムが VARCHAR型 になっています。
この時、そのカラムに対して MAX() をした時に思わぬ数字になることがあります。

こんなデータが有るときに

とすると

本当なら 24 を期待していたところなんですが。

となります。

データの1文字目をチェックして 2 より 9 のほうが大きいからそうなったんでしょう。

なので、 MAX() するときに値を数値にキャストしてみます。

CAST関数 については CAST(キャストしたいカラム名 AS キャスト先の型) とします。
キャスト先の型については create table する時のような int とかではなく決められたものを指定します。
MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.8 キャスト関数と演算子

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

CAST関数 の代わりに CONVERT関数も使えます。

なんだかややこしいですが、最初っから INT型 のカラムにしておけば問題ありません。
今回は外部からのデータを取り込むテーブルのため、「もし万が一文字列がきたらどうしよう」という事情のため VARCHAR型 カラムにしたためこのような措置をとりました。

この記事をシェアする

関連記事

FuelPHP の ORM\Model での find(‘all’) について

No Image

No Image

No Image

about

Toru TAMURA

Toru TAMURA

PHP, Ruby などをあやつるWebエンジニアです。Amazon Web Service(AWS)のユーザーグループ JAWS-UG 島根支部所属 [詳細]