タイトルとして、今日の200905のように、「YYYYMM」の形式で現在の年と月をデフォルト値とするようにテーブルの列を設定するにはどうすればよいですか?
日付のフォーマットはストレージに依存しないことに注意してください。日付がstoredであることが必要な場合は、カスタムデータ型を定義するか、文字列として保存する必要があります。次に、 extract 、型キャスト、および連結の組み合わせを使用して、その形式を取得できます。
ただし、日付を保存し、出力で形式を取得する必要があると思われます。したがって、次のようなものがあなたのためのトリックを行います:
CREATE TABLE my_table
(
id serial PRIMARY KEY not null,
my_date date not null default CURRENT_DATE
);
(CURRENT_DATE is basically a synonym for now() and a cast to date).
(to_charを使用するように編集)。
次に、次のような出力を取得できます。
SELECT id, to_char(my_date, 'yyyymm') FROM my_table;
ここで、didがそのフィールドを文字列として保存し、常に実行できる形式を確保する必要がある場合:
CREATE TABLE my_other_table
(
id serial PRIMARY KEY not null,
my_date varchar(6) default to_char(CURRENT_DATE, 'yyyymm')
);
Milen A. Radevが彼のソリューションを投稿するのに手が回らない場合に備えて、これは次のとおりです。
CREATE TABLE foo (
key int PRIMARY KEY,
foo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
なぜあなたはこれをしたいのですか?
私見では、デフォルトのタイプとして日付を保存し、必要に応じて取得して目的の形式に変換する必要があります。
列の形式を指定することで、ビューを使用して問題を回避できます。他の方法は知りません。
編集済み:
真剣に、私の意見では、日付型を持つテーブルのビューを作成する必要があります。私はこのようなことについて話している:
create table sample_table ( id serial primary key, timestamp date);
そしてより
create view v_example_table as select id, to_char(date, 'yyyymmmm');
そして、アプリケーションでv_example_tableを使用します。
回答してくれたすべての人に感謝し、関数形式のアイデアをくれた人に感謝します。将来の使用のために本当に勉強します。
ただし、この明示的なケースでは、「特別なyyyymmフィールド」は日付フィールドとしてではなく、単なるタグとして見なされます。正確に年と月の調査値を一致させるために使用されるもの。完全なタイムスタンプを備えた別の日付フィールドがすでにありますが、2008年1月のすべての行が必要な場合は、
SELECT [columns] FROM table WHERE yearmonth = '200801'
の代わりに
SELECT [columns] FROM table WHERE date BETWEEN DATE('2008-01-01') AND DATE('2008-01-31')
パフォーマンスのためにこのように非正規化できるのはよくある誤解です。クエリにdate_trunc('month', date)
を使用し、実行に時間がかかる場合はインデックス式を追加します。