(SQLite3, MySQL, PHP) 小数点以下は切り上げて整数にしたい
たとえば、あるフィールドの値をすべて2分の1にする場合。
MySQLでは"CEIL()"が使えるので簡単です。
(MySQL)
UPDATE tbl SET hoge = CEIL(hoge / 2);
しかし、SQLiteでは"CEIL()"を使えません。
上のSQLをPHPで実行すると、下記のような警告が…。
【参考】
Warning: SQLite3::exec() [sqlite3.exec]: no such function: CEIL in D:\MyDocument...
SQLではサポートされていない機能の一覧
http://www.sqlite.org/cvstrac/wiki?p=UnsupportedSql
これは困りました。
で、ぐぐって探し当てた解決策が、下記です。
型変換の"CAST()"関数を使います。
【参考】
(SQLite)
※ 小数点以下は切り捨て
UPDATE tbl SET hoge = CAST(hoge / 2 as int);※ 小数点以下は切り上げ
UPDATE tbl SET hoge = (CASE WHEN hoge % 2 > 0 THEN CAST(hoge / 2 + 1 as int) ELSE CAST(hoge / 2 as int) END);
sql - Getting the floor value of a number in SQLite? - Stack Overflow
http://stackoverflow.com/questions/7129249/getting-the-floor-value-of-a-number-in-sqlite
実は、フィールドの型を整数にしていれば、MySQLならば切り上げ、SQLite3ならば切り捨ての処理が自動で行われます。
まとめると、下記です。
MySQL | SQLite3 | |
---|---|---|
切り上げ | CEIL(hoge / 2) | (CASE WHEN hoge % 2 > 0 THEN CAST(hoge / 2 + 1 as int) ELSE CAST(hoge / 2 as int) END) |
切り捨て | FLOOR(hoge / 2) | CAST(hoge / 2 as int) |
整数型のフィールド | (hoge / 2) で切り上げ | (hoge / 2) で切り捨て |