2017-04-24 11 views
0

私はPostgreSQLの契約データベースに取り組んでいます。私のデータベースの一つの列は契約番号/ IDであり、ID /年のように書かれたでなければなりません。私は、契約年月の開始日を持つコラムを用意しています。PostgreSQLで年式のID

今の私は、自動インクリメントするがYear部分がないシリアルIDを持っています。

I have 
ID  | DATE_FROM 
----------------------- 
1  | 2016-10-01 
2  | 2016-11-01 
3  | 2017-01-01 


I need 
ID  | DATE_FROM 
----------------------- 
1/2016 | 2016-10-01 
2/2016 | 2016-11-01 
1/2017 | 2017-01-01 

私は、PostgreSQLに新たなんだと私はどのように行うのか分からないが、私はそこだけではPostgreSQLでそれを行う方法であり、誰が助けることができれば、私は喜んでいるでしょう確信しています。再起動のために年度別のカウンタは、あなたがしている私はIDを想定ROW_NUMBER()

SELECT ROW_NUMBER() OVER (PARTITION BY EXTRACT(YEAR FROM "FROM") 
          ORDER BY "ID")::text || 
     '/' || EXTRACT(YEAR FROM "FROM"), 
     "FROM" 
FROM yourTable; 

を使用します。

+0

私は書式設定について心配しないでくださいn DB。データの論理構造について心配しています。アプリケーションがデータを取得するときにデータをフォーマットするようにします。 –

答えて

1

あなたはFROM

SELECT ID::text || '/' || EXTRACT(YEAR FROM "FROM"), 
     "FROM" 
FROM yourTable; 

がEDIT "FROM"他の賢明なあなたが混乱しますキーワードをフィールド名を変更する必要があります時系列順、他の賢明なパーティションの順序を変更することができますORDER BY "FROM"

+0

と 'concat'または' || '?.. –

+0

@VaoTsunあなたは正しいです。 –

+0

OPは毎年シーケンスを再開したいようです。 –