データベース

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

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

WordPress短期学習プログラム

関連記事

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

    サーバ

    [CVE-2016-0639] MySQLの脆弱性

    利用しているサーバにインストールしているMySQLのバージョンに、…

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

    データベース

    【MySQL】CONCAT関数の便利な使い方

    MySQLのCONCAT関数についてまとめてみました。…

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

    サーバ

    ConoHaサーバへMySQL5.7をインストール

    こちらの記事では、ConoHa VPSサーバへのMySQL5.6の…

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

    データベース

    文字列をソートしたい(MySQL)

    以前弊社で構築したMySQLを使用したシステムがあるのですが、本日…

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

    PHP

    【MySQL】位置情報(座標)をGeometry型で扱う方法

    【MySQL】Geometry型で位置情報(座標)を扱う…

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

    データベース

    サーバが応答しません (あるいはローカルサーバのソケットが正しく設定されていません)。

    現在、お問い合わせフォームと簡単な静的ページのみで公開しているサイトが…

最近の記事

  1. PHP(ピー・エイチ・ピー)
  2. PHP(ピー・エイチ・ピー)
  3. WP:WordPress(ワードプレス)
  4. WP:WordPress(ワードプレス)
  5. WP:WordPress(ワードプレス)
  6. Security(セキュリティ)
  7. WP:WordPress(ワードプレス)
  8. WP:WordPress(ワードプレス)
  9. WP:WordPress(ワードプレス)
  10. アフィリエイト
PAGE TOP