2017-01-26 5 views
0

postgresでは、一方のテーブルにdouble precisionデータ型を含むカラムがあり、もう一方のテーブルには2つのテーブルを結合しようとするとエラーが発生します。一致する列と私は Amountフィールドにあるだけのテーブルからのレコードが欲しいです。UNION ALL、倍精度としてNULLをキャストします。

エラー:

"union types text and double precision cannot be matched postgres"

擬似コード:

SELECT * FROM (

SELECT 
    t1.Amount AS 'amount', 
    NULL::DATE AS 'date' 
FROM Table1 AS t1 
UNION ALL 

SELECT 
    /* next line is the issue */ 
    NULL AS 'amount', 
    t2.Date AS 'date' 
FROM Table2 AS t2 

) AS FOO 

私はこのソリューションは、単純なキャストの問題ですが、検索から何かを見つけることができませんでしたかなり特定感じます。ポストグルでNULL::DOUBLEの相当品をどうすればいいですか?

EDIT ::後世

syntax is equivalent表現::キャスト "歴史" のpostgresを指し@klinと@ a_horse_with_no_nameさんのコメントから受け入れ答え:

CAST (expression AS type) 
expression::type 

そして、ここにあるのpostgres data typesのリスト

答えて

1

Postgresのタイプdouble precisionは、float8または単にfloatとも呼ばれます。それらの1つを使用してください。

select null::double precision, null::float; 
+0

「NULL :: INT」を使用して終了し、匂いテストに合格しました(1回)。このキャストの使用方法やドキュメントへのリンクはありますか?前もって感謝します。 – wahwahwah

+1

@wahwahwah:驚くべきことに、構文の章に「Type Casts」という章があります。https://www.postgresql.org/docs/current/static/sql-expressions.html#SQL-SYNTAX-TYPE-CASTS –

+0

[Type Conversion](https://www.postgresql.org/docs/current/static/typeconv.html)にも興味があります。 – klin