HOWTO · PostgreSQL

PostgreSQL で整数を文字列にキャストする

このチュートリアルでは、PostgreSQL で整数を文字列にキャストする方法について説明します。

このページの内容

PostgreSQLで整数を文字列に変換するには、CAST(value AS text)またはPostgreSQLのvalue::text構文を使って、型をtextにキャストします。クエリでテキスト値が必要な場合はどちらの形式でも使えます。テキストと別の型の値を結合する場合はCONCATを使います。以下のSQLスニペットは構文を示すもので、実行結果は掲載していません。

CASTで整数をtext型に変換する

CASTは標準SQLの構文で、変換元と変換先の型を明示できます。たとえば、SELECT CAST(123 AS text) AS string_value;は、123を含むtext型の値を返します。クエリで列や式の値をテキストとして使う場合は、整数リテラルをCAST(order_id AS text)のような列または式に置き換えてください。PostgreSQLでは文字列型をtextと呼びます。「文字列」は、ここで表現する値を指す一般的な言い方です。

PostgreSQLの::キャスト演算子を使う

PostgreSQLでは、簡潔な::キャスト演算子も使えます。SELECT 123::text AS string_value;は、CASTを使う形式と同じ整数を同じ型に変換します。共有するSQLでは明示的な形式のほうが読みやすい場合があり、周囲のPostgreSQLクエリに合うなら演算子の形式を選べます。どちらも型変換を表す構文です。区切り文字や余白など、表示形式を指定するものではありません。

WHERE句でtext型の列と整数を比較する

quiz_score.scoreの型がtextで、比較したい値が整数だとします。scoreを100と直接比較すると、text型と整数型が混在します。整数側をtext型にキャストすれば、両方のオペランドの型を揃えられます。例:SELECT score FROM quiz_score WHERE score = CAST(100 AS text);。PostgreSQLではWHERE score = 100::textとも書けます。

この比較では列をテキストとして扱います。たとえば、テキスト値の100と0100は、同じ数値を表せる場合でも別の値です。数値として比較する場合は、列の値がすべて有効な整数であるときに限って列を変換してください。そうでなければ変換に失敗することがあります。列がすでに数値型なら、text型にキャストせず数値と比較してください。

CONCATでテキストと数値を結合する

CONCATは引数を結合し、テキスト以外の引数は結合結果の中でテキストに変換します。たとえば、SELECT CONCAT('The number is ', 123);は、The number is 123というテキストを組み立てます。この例のラベルは英語の文字列リテラルです。ラベルやメッセージを作るときに便利ですが、単独のキャストを表す3つ目の書き方ではありません。変換した整数そのものがクエリで必要なら、CASTまたは::textを使います。PostgreSQLのCONCATはNULL引数を無視します。代わりの値を指定するには、valueがテキスト以外の型である可能性がある場合、COALESCE(value::text, 'fallback')を使います。キャストによって、COALESCEの両方の引数の型が揃います。

よくある質問

CASTと::の違いは何ですか? CAST(value AS text)は標準SQLの構文で、value::textはPostgreSQL固有の簡略構文です。どちらも値をtext型にキャストします。

ほかの値もtext型にキャストできますか? PostgreSQLでは、日付や真偽値など多くの型からキャストできます。変換後のテキスト表現は、変換元の型とその出力表現によって異なります。

WHERE句でキャストを使えますか? はい。text型の列と比較するときは、score = 100::textのように整数のパラメーターや式をtext型にキャストします。比較する値の意味と型が意図どおりに揃っていることを確認してください。