今日は、MySQLで久しぶりにはまりました。
そもそも、最近は自分でSQLを組む機会が減っていたので、
ほぼ忘れかけています。
ということで、
自分用の備忘録として今日やった事をブログに残しておきます。
やっていたとことと言えば、
金額(整数部分)と金額(小数部分)のカラムを分けているシステムがあるのですが、
二つの項目を結合して、かつ単位(万円)を付けた項目を作成する事です。
例えば「9.2万円」や「5.0万円」みたいな感じです。
金額(整数部分)は「price_int」、金額(小数部分)は「price_dec」というカラム名なので、
「price」というカラムを追加して、
そのカラムに結合した値を入れてやることに。
で、実行したSQLは
======================================================================
update main_db set price=CONCAT(price_int, '.', price_dec, '万円')
======================================================================
です。
ただ、ここで問題が。
この金額項目は必須項目ではなく、NULLも禁止にしているので、
「price_dec」や「price_int」に何も値が入っていないレコードありました。
なので、
「9.万円」や「5.万円」のようなおかしな値がちらほらと混ざっていました。
NULLが入っていればIFNULLが使えるので、
======================================================================
update main_db set price=CONCAT(IFNULL(price_int,0),'.',IFNULL(price_dec,0),'万円')
======================================================================
とすれば、
NULLの場合には「0」に置き換えてくれるのですが、
それもかなわず。。。
で、仕方ないので、
CASTで無理やりテキスト型を整数型に変換して実行してやることに。
======================================================================
update main_db set price=CONCAT(CAST(price_int as SIGNED), '.', CAST(price_dec as SIGNED ), '万円')
======================================================================
CAST(カラム名 as SIGNED)とすれば、
テキスト項目を数値型に変換してくれるので、
項目が空白の場合には「0」を勝手に入れてくれます。
取り敢えず、
こんな無理やりな方法で解決です。
本来はPHPで
======================================================================
echo 金額(整数部分) . "." . 金額(小数部分) . "万円";
======================================================================
とすれば表示側で解決する話なんですが、
いろいろ訳あってこんな面倒な事をしていました。
この記事へのコメントはありません。