読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

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

MySQL SQL

スポンサードリンク

商品のテーブルがあり、その中で登録しているカラム「商品の高さ」を"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;