ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

【MySQL】varchar型のカラムをinteger側で検索したいとき

スポンサードリンク

商品のテーブルがあり、その中で登録しているカラム「商品の高さ」を"0cm〜30cmまで"みたいな検索を実装したかった。

普通に考えたらこんな感じ。

mysql> select * from items where height between '0' and '30';

しかし、その昔の仕様の際は「cm」と単位が入っていて、カラムの型がvarcharでした。なので、検索ができない事態に陥る。

さて、困った。

でも調べたらすぐわかりました。

castしてあげればおk

mysql> select * from items where cast(height as unsigned) between '0' and '300';

ちなみに、実装したのはCakePHP側だったので、下記のように修正

<?php

...

'conditions' => [
  '(Item.height as unsigned) BETWEEN ? AND ?' => $heightQueryArray // [0, 30] な感じで配列が入っている
]

...

めでたしめでた。。。

と、思ったけど、やっぱりカラムの型を修正しました。こういうのって後回しにしていると後が怖いからね。

$ alter table items modify column height integer;