MySQL(マイエスキューエル)

久しぶりのMySQLです

今日は、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 金額(整数部分) . "." . 金額(小数部分) . "万円";
======================================================================
とすれば表示側で解決する話なんですが、

いろいろ訳あってこんな面倒な事をしていました。

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. ドメインについて
  2. WP:WordPress(ワードプレス)
  3. URL設計(URLデザイン)
  4. URL「ディレクトリ名」と文字アンダースコア(_)とハイフン(-)
  5. SEO対策(外部ファイルの読み込み)
  6. URL リダイレクト
  7. インデックスされない
  8. 内部対策は必要?
  9. CMS(シーエムエス)
  10. SEO業者は必要?

アーカイブ

PAGE TOP