2016-12-03 6 views
-1

this questionに触発されています。PostgreSQLのエンコードBCの日付

年、月、日(年が負の場合)を簡単な方法でBCの日付にエンコードすることはできますか?

select make_date(1,1,1) - interval '11 years'; 
select format('%s-%s-%s BC', '0011','01','01')::date; 

が、明らかにそれが最善のアプローチではありません。

select make_date(-11,1,1); 
ERROR: date field value out of range: -11-01-01 

ありのようないくつかの選択肢があるような直接的な方法を試し

だから、バグのいくつかの種類のように思える:

select extract(year from '0011-01-01 BC'::date); 
╔═══════════╗ 
║ date_part ║ 
╠═══════════╣ 
║  -11 ║ 
╚═══════════╝ 

が、エラーの原因となっmake_date機能で今年の負の値を使用して。

テスト済みPostgreSQL 9.5

答えて

1

はい、これは奇妙に思われます。

もしあなたがpgsql-hackersメーリングリスト用のパッチを出すことができるならば、それを修正する機会があります。

+0

'make_date(1、-1,1);および' ERROR:日付フィールドの値が範囲外です:1--1-01'のようなエラーメッセージを見てください)、 'make_date'関数'cast(format( '%s-%s-%s'、$ 1、$ 2、$ 3)のように)は完全に間違っています。 – Abelisto

関連する問題