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値」をチェックするための最良の方法