【SQL初心者向け】SQLiteで床関数(FLOOR)を使って小数点以下の部分を切り捨てて整数を取得する方法
SQLiteで数の床値を取得する方法
FLOOR関数を使用する
FLOOR関数は、引数として渡された数値の小数点以下の部分を切り捨て、最も近い整数を返します。これが最も一般的でシンプルな方法です。
SELECT FLOOR(数値);
例:
SELECT FLOOR(3.14); -- 結果: 3
SELECT FLOOR(-2.71); -- 結果: -3
CAST関数と負のゼロを使用する
CAST関数を使用して、数値を別のデータ型に変換することもできます。床値を取得するには、数値をINTEGER型にキャストし、負のゼロを使用します。負のゼロは、小数点以下の部分を切り捨てます。
SELECT CAST(数値 AS INTEGER);
SELECT CAST(3.14 AS INTEGER); -- 結果: 3
SELECT CAST(-2.71 AS INTEGER); -- 結果: -3
自作関数を使用する
より複雑なロジックが必要な場合は、自作関数を作成することもできます。以下の例では、正の数に対してはFLOOR関数を使用し、負の数に対しては負のゼロを使用する関数を作成しています。
CREATE FUNCTION floor_abs(number)
BEGIN
IF number >= 0 THEN
RETURN FLOOR(number);
ELSE
RETURN CAST(number AS INTEGER);
END IF;
END;
この関数は次のように使用できます。
SELECT floor_abs(数値);
SELECT floor_abs(3.14); -- 結果: 3
SELECT floor_abs(-2.71); -- 結果: -3
SQLiteで数の床値を取得するサンプルコード
FLOOR関数を使用する
-- サンプルテーブルを作成
CREATE TABLE numbers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
number REAL
);
-- サンプルデータを挿入
INSERT INTO numbers (number) VALUES (3.14), (-2.71);
-- FLOOR関数を使用して床値を取得
SELECT id, number, FLOOR(number) AS floor_value
FROM numbers;
id | number | floor_value
------- | -------- | --------
1 | 3.14 | 3
2 | -2.71 | -3
CAST関数と負のゼロを使用する
-- サンプルテーブルを作成 (上記と同じ)
-- CAST関数と負のゼロを使用して床値を取得
SELECT id, number, CAST(number AS INTEGER) AS floor_value
FROM numbers;
このコードは、上記のコードと同じ結果を出力します。
自作関数を使用する
-- サンプルテーブルを作成 (上記と同じ)
-- 自作関数を作成
CREATE FUNCTION floor_abs(number)
BEGIN
IF number >= 0 THEN
RETURN FLOOR(number);
ELSE
RETURN CAST(number AS INTEGER);
END IF;
END;
-- 自作関数を使用して床値を取得
SELECT id, number, floor_abs(number) AS floor_value
FROM numbers;
これらのサンプルコードは、SQLiteで数の床値を取得する方法を理解するのに役立ちます。
補足:
- 上記のコードは、SQLite 3.36.0.2 でテストされています。
- データベースの名前やテーブルの名前は、必要に応じて変更してください。
- コードを実行する前に、データベースが適切に作成されていることを確認してください。
SQLiteで数の床値を取得するその他の方法
以下の式を使用して、数の床値を取得することもできます。
SELECT number - (number % 1);
この式は、数値から小数点以下の部分を引き算することで、床値を取得します。
SELECT 3.14 - (3.14 % 1); -- 結果: 3
SELECT -2.71 - (-2.71 % 1); -- 結果: -3
NUMERIC型を使用する
NUMERIC型は、固定小数点数の保存に使用されるデータ型です。NUMERIC型を使用すると、小数点以下の桁数を指定して、数値を自動的に丸めることができます。
SELECT CAST(数値 AS NUMERIC(p, s));
SELECT CAST(3.14 AS NUMERIC(3, 0)); -- 結果: 3.0
SELECT CAST(-2.71 AS NUMERIC(2, 1)); -- 結果: -3.0
この例では、NUMERIC(3, 0)
は小数点以下の桁数を3桁に指定し、NUMERIC(2, 1)
は小数点以下の桁数を2桁に指定して、1桁目を切り捨てます。
サブクエリを使用する
SELECT (
SELECT number
FROM numbers
ORDER BY number DESC
LIMIT 1
) AS floor_value
FROM numbers;
このサブクエリは、numbers
テーブル内の数値を降順に並べ替え、最初の行の数値を返します。最初の行の数値は、その数値より大きい数値が存在しないため、床値となります。
CREATE TABLE numbers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
number REAL
);
INSERT INTO numbers (number) VALUES (3.14), (-2.71);
SELECT (
SELECT number
FROM numbers
ORDER BY number DESC
LIMIT 1
) AS floor_value
FROM numbers;
floor_value
-------
3
-3
sql sqlite floor