PostgreSQLで文字列を整数に変換する方法
PostgreSQLで文字列を整数に変換する方法
- 変換する値
- 変換後のデータ型
例
-- 文字列 "123" を整数に変換
SELECT CAST('123' AS INTEGER);
-- 結果: 123
-- 文字列 "12.34" を整数に変換 (小数点以下は切り捨て)
SELECT CAST('12.34' AS INTEGER);
-- 結果: 12
-- 文字列 "abc" を整数に変換 (エラーが発生)
SELECT CAST('abc' AS INTEGER);
-- エラー: 無効な数値
安全なキャスト
CAST
関数を使用する際は、変換する文字列が実際に数値であることを確認する必要があります。そうでない場合は、エラーが発生します。
安全なキャストを行うためには、TRY_CAST
関数を使用することができます。TRY_CAST
関数は、変換が成功した場合のみ結果を返し、失敗した場合はNULLを返します。
-- 文字列 "123" を整数に変換 (成功)
SELECT TRY_CAST('123' AS INTEGER);
-- 結果: 123
-- 文字列 "abc" を整数に変換 (失敗)
SELECT TRY_CAST('abc' AS INTEGER);
-- 結果: NULL
PostgreSQLには、文字列を数値に変換する他にも、以下のような関数があります。
TO_NUMBER
: 文字列を数値に変換し、指定された書式でフォーマットします。INT4
: 文字列を整数に変換します。
これらの関数は、それぞれ異なる機能を持っているので、目的に合った関数を選択する必要があります。
詳細は、PostgreSQLの公式ドキュメントを参照してください。
-- サンプルテーブル
CREATE TABLE sample (
id INT,
name VARCHAR(255)
);
-- データ挿入
INSERT INTO sample (id, name) VALUES (1, 'John Doe');
INSERT INTO sample (id, name) VALUES (2, 'Jane Doe');
-- 文字列を整数に変換
SELECT id, CAST(name AS INTEGER) AS age
FROM sample;
-- 結果:
-- id | age
-- -- | --
-- 1 | NULL
-- 2 | NULL
-- TRY_CAST関数を使用して安全なキャスト
SELECT id, TRY_CAST(name AS INTEGER) AS age
FROM sample;
-- 結果:
-- id | age
-- -- | --
-- 1 | NULL
-- 2 | NULL
このコードでは、sample
テーブルに2つのレコードが挿入されています。
id
1、name
"John Doe"
CAST
関数を使用してname
列を整数に変換しようとすると、両方のレコードでNULLが返されます。これは、name
列の値が数値ではないためです。
TRY_CAST
関数を使用して安全なキャストを行うと、両方のレコードでNULLが返されます。これは、TRY_CAST
関数は変換が成功した場合のみ結果を返し、失敗した場合はNULLを返すためです。
このサンプルコードは、CAST
関数とTRY_CAST
関数の使用方法を理解するのに役立ちます。
PostgreSQLで文字列を整数に変換する他の方法
SUBSTRING
関数とREGEXP_REPLACE
関数を使用して、文字列から数字のみを取り出して、それを整数に変換することができます。
-- サンプルテーブル
CREATE TABLE sample (
id INT,
name VARCHAR(255)
);
-- データ挿入
INSERT INTO sample (id, name) VALUES (1, 'John Doe 123');
INSERT INTO sample (id, name) VALUES (2, 'Jane Doe 456');
-- 数字のみを取り出す
SELECT id,
CAST(REGEXP_REPLACE(SUBSTRING(name, '[0-9]+'), ' ', '') AS INTEGER) AS age
FROM sample;
-- 結果:
-- id | age
-- -- | --
-- 1 | 123
-- 2 | 456
このコードでは、SUBSTRING
関数を使用して、name
列から数字のみを取り出しています。
SUBSTRING(name, '[0-9]+')
この式は、name
列から1つ以上の数字 ([0-9]+
) を抽出します。
次に、REGEXP_REPLACE
関数を使用して、抽出された文字列から空白文字 () を削除しています。
REGEXP_REPLACE(SUBSTRING(name, '[0-9]+'), ' ', '')
この式は、抽出された文字列内のすべての空白文字を空の文字列 (''
) に置き換えます。
最後に、CAST
関数を使用して、抽出された文字列を整数に変換しています。
CAST(REGEXP_REPLACE(SUBSTRING(name, '[0-9]+'), ' ', '') AS INTEGER)
この式は、抽出された文字列を整数に変換し、age
列に格納します。
CASE式を使用して、文字列を整数に変換することができます。
-- サンプルテーブル
CREATE TABLE sample (
id INT,
name VARCHAR(255)
);
-- データ挿入
INSERT INTO sample (id, name) VALUES (1, 'John Doe 123');
INSERT INTO sample (id, name) VALUES (2, 'Jane Doe 456');
-- CASE式を使用して文字列を整数に変換
SELECT id,
CASE
WHEN name LIKE '%[0-9]+%' THEN CAST(REGEXP_REPLACE(name, '[^0-9]', '') AS INTEGER)
ELSE NULL
END AS age
FROM sample;
-- 結果:
-- id | age
-- -- | --
-- 1 | 123
-- 2 | 456
このコードでは、CASE式を使用して、name
列が数字のみかどうかをチェックしています。
CASE
WHEN name LIKE '%[0-9]+%' THEN CAST(REGEXP_REPLACE(name, '[^0-9]', '') AS INTEGER)
ELSE NULL
END
WHEN name LIKE '%[0-9]+%'
:name
列が数字のみの場合CAST(REGEXP_REPLACE(name, '[^0-9]', '') AS INTEGER)
: 数字のみの文字列を整数に変換ELSE NULL
:name
列が数字のみではない場合
-- サンプルテーブル
CREATE TABLE sample (
id INT,
name VARCHAR(255)
);
-- データ挿入
INSERT INTO sample (id, name) VALUES (1, 'John Doe 123');
INSERT INTO sample (id, name) VALUES (2, 'Jane Doe 456');
-- to_number関数を使用して文字列を整数に変換
SELECT id, to_number(name, '999') AS age
FROM sample;
-- 結果:
-- id | age
-- -- | --
-- 1 | 123
-- 2 | 456
to_number(name, '999')
:name
列を整数に変換し、最大9桁まで表示
to_number
関数は、`
postgresql