sql >> データベース >  >> RDS >> PostgreSQL

Postgres SELECTの列を連結するにはどうすればよいですか?

    character(2)のような文字列型の列 (後で説明するように)、マニュアルを引用すると、表示された連結は正しく機能します:

    [...]文字列連結演算子(||少なくとも1つの入力が文字列タイプである限り、文字列以外の入力を受け入れます 、表9.8に示すように。その他の場合は、textに明示的な強制を挿入します [...]

    大胆な強調鉱山。 2番目の例(select a||', '||b from fooすべてで機能します 型指定されていない文字列リテラル以降のデータ型', ' デフォルトのタイプはtext いずれの場合も式全体を有効にします。

    文字列以外のデータ型の場合、textに少なくとも1つの引数をキャストすることで、最初のステートメントを「修正」できます。 。 (任意 タイプはtextにキャストできます ):

    SELECT a::text || b AS ab FROM foo;
    

    あなた自身の答えから判断すると、「は機能しません 「」は「がNULLを返す」を意味するはずでした "。何かの結果 NULLに連結されたものはNULLです。 NULLの場合 値を含めることができ、結果はNULLであってはなりません。 concat_ws()を使用してください 任意の数の値を連結するには(Postgres 9.1以降):

    SELECT concat_ws(', ', a, b) AS ab FROM foo;
    

    セパレータは、null以外の値の間にのみ、つまり必要な場合にのみ追加されます。

    またはconcat() セパレータが必要ない場合:

    SELECT concat(a, b) AS ab FROM foo;
    

    どちらの関数も"any"を使用するため、ここでは型キャストは必要ありません。 テキスト表現を入力して操作します。

    詳細(およびCOALESCEの理由 この関連する回答では、代替としては不十分です):

    • 2つの列を組み合わせて、1つの新しい列に追加します

    コメントの更新について

    + Postgres(または標準SQL)での文字列連結の有効な演算子ではありません。これを自社の製品に追加することは、Microsoftの私的な考えです。

    character(n)を使用する正当な理由はほとんどありません。 (同義語: char(n) )。 textを使用する またはvarchar 。詳細:

    • 文字列を格納するためにデータ型「テキスト」を使用することの欠点はありますか?
    • 「空またはnull値」をチェックするための最良の方法


    1. sqlliteで作成およびエクスポートされたアセットフォルダーandroidからデータベースを配置してデータベースを読み取る方法

    2. プリズマ関係

    3. 同じテーブル内の別の行のデータで行を更新する

    4. 同じ列で異なる値がカウントされます