2017-07-12 6 views
0

適切な世紀/千年を計算するためにPostgreSQL 9.5バージョンに組み込まれた関数がありますか?RR MILLENNIUM相当のPostgres

私はテーブルからBirth_Dateの:: TIMESTAMPを使用し、時にはそれが19をプレフィックスと、時にはそれが20

例以下は、入力接頭辞:

28JUN80 
25APR48 

に出力:

"1980-06-28 00:00:00" 
"2048-04-25 00:00:00" 

を私はまた、 "07APR1963"のようなbirth_date保持値を持つレコードがテーブルにあり、 "1963-04-07 00:00:00"として適切に計算されます。

長さが7文字の場合はCASE文を使用し、接頭辞は19000000、その9文字の場合はそのままそのままロードしてください。

+0

TO_TIMESTAMP(Birth_Dateの 'DDMONYYYYは')0080-06-28 00」のように私に価値を与えます: 00:00 + 00」と「0048-04-25 00:00:00 + 00」 –

+0

お試しください。 to_timestamp( '25APR48'、 'ddmonyy')を選択します。私の場合、結果セットは "2048-04-25 00:00:00 + 00"です。私はそれが1948年に始まることを期待していた –

答えて

0

https://en.wikipedia.org/wiki/Unix_timeUnixエポックは、それはあなたが世紀を指定しないのであれば

(〇時00分00秒1970年1月1日)を開始

ですが、ちょうど最後のYY00:00:00 1 Januaryから21世紀前には、YYと同じです。70です。あなたは、それは例えば、あなたがそうであるように年を追加、またはCCを指定するいずれかの20世紀を推測する場合:文字列からの変換で

t=> select 
    to_timestamp('1JAN70', 'ddmonYY') 
, to_timestamp('31DEC69', 'ddmonyy') 
, to_timestamp('31DEC69 20', 'ddmonyy cc'); 
     to_timestamp  |  to_timestamp  |  to_timestamp 
------------------------+------------------------+------------------------ 
1970-01-01 00:00:00+00 | 2069-12-31 00:00:00+00 | 1969-12-31 00:00:00+00 
(1 row) 

https://www.postgresql.org/docs/current/static/functions-formatting.html

にタイムスタンプまたは日付し、CC(世紀) フィールドは、YYY、YYYYまたはY、YYYフィールドがある場合は無視されます。 CCが をYYまたはYと使用する場合、年は指定された 世紀の年として計算されます。世紀が指定されていても年が指定されていない場合は、世紀の最初の年が指定されています( )。

更新

だからあなたの場合にはあなたのようななめらか作業を行う必要があります。

vao=# create table arasu (member_birth_date character(9)); insert into arasu values ('28JUN80'),('25APR48'); 
CREATE TABLE 
INSERT 0 2 
vao=# select to_timestamp(member_birth_date||' 20', 'ddmonYY cc') from arasu; 
     to_timestamp 
------------------------ 
1980-06-28 00:00:00+03 
1948-04-25 00:00:00+03 
(2 rows) 
+0

ありがとうございましたVao、to_timestamp( '31DEC69 20'、 'ddmonyy cc')は私のために良いオプションのようです。しかし、私はVARCHARフィールドEx: 'to_timestamp(to_date(birthdate、 'DDMONYYYY')|| '' || 19、 'ddmonyy cc') スキーマの日付を保持するテーブルの列でこれを実行することができません。テーブル –

+0

A' @HarinathArasuはあなた –

+0

は 'schema.arasu値( '28JUN80') 選択TO_TIMESTAMPにテーブルschema.arasu(member_birth_date文字(9)) のインサートを作成するために動作しませんでした連結の例と答えをupdtaed ( '20' || member_birth_date、 'ddmonyy cc')をスキーマから取得します。arasu a' –