SQLクエリでMySQLフィールドの保存価格から20%(消費税分)を除去する方法
価格データから税抜きの金額を求めたいケースはよくあります。ここでは、保存されている価格に20%の消費税が上乗せされて含まれている場合を想定し、SQLクエリを使ってその税相当分(20%)を取り除く方法を解説します。
まずはサンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
(
Price int
);
Query OK, 0 rows affected (1.09 sec)テストデータの挿入
INSERTコマンドを使って、いくつかのレコードをテーブルに追加します。
mysql> insert into DemoTable values(20); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(40); Query OK, 1 row affected (0.07 sec) mysql> insert into DemoTable values(80); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(60); Query OK, 1 row affected (0.18 sec)
登録データの確認
SELECT文で、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------+ | Price | +-------+ | 20 | | 40 | | 80 | | 60 | +-------+ 4 rows in set (0.00 sec)
20%の税分を除去するUPDATEクエリ
それでは、保存された価格から20%の税相当分を差し引くクエリを見ていきましょう。
ポイントとなるのは計算方法です。価格に20%の消費税が含まれているということは、税抜き価格に対して「1 + 0.20 = 1.2倍」した金額が保存されていることになります。つまり、税抜き価格を求めるには、保存されている価格を 120/100 = 1.2 で割ればよいのです。
mysql> update DemoTable set Price=Price/1.2; Query OK, 4 rows affected (0.11 sec) Rows matched: 4 Changed: 4 Warnings: 0
更新結果の確認
もう一度テーブルのレコードを確認してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------+ | Price | +-------+ | 17 | | 33 | | 67 | | 50 | +-------+ 4 rows in set (0.00 sec)
このように、Priceカラムの値がすべて約16.7%(1/1.2)減少しました。例えば元の値が20だったレコードは17になっています。なお、PriceカラムはINT型のため小数点以下は切り捨てられています。より正確な税抜き価格が必要な場合は、DECIMAL型などの小数を扱えるデータ型を使用することをおすすめします。
-
MySQLストアドプロシージャ内で現在のデータベース名を取得する方法
MySQLで現在接続しているデータベース名を取得したい場合は、DATABASE() 関数を使用します。まず、基本的な構文を見てみましょう。基本構文select database();この関数は、現在選択されているデータベースの名前を文字列として返します。データベースが選択されていない場合は NULL を返します。ストアドプロシージャへの実装次に、上記の構文を実際にストアドプロシージャの中に組み込んでみましょう。以下の手順で作成できます。mysql> delimiter // mysql> create procedure get_procedure_database_name()
-
MySQLストアドプロシージャ内で動的SQLクエリを実装する方法
ストアドプロシージャ内で動的SQLクエリを実行するには、PREPARE STATEMENT(プリペアドステートメント)の仕組みを利用します。まずはサンプル用のテーブルを作成しましょう。1. テーブルの作成mysql> create table DemoTable2033 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> ); Query OK, 0 rows affected (1.61 sec)2. レコードの挿入INSERTコマン