作爲標題,我如何設置表格的列以默認值爲當前年份和月份,格式爲「YYYYMM」,如今天的200905?如何設置像'YYYYMM'這樣的Postgresql默認值datestamp?
回答
請注意,日期的格式與存儲無關。如果以這種格式存儲日期爲的對您至關重要,您將需要定義自定義數據類型或將其存儲爲字符串。然後,您可以使用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;
現在,如果你做真的需要那場存儲爲一個字符串,並確保格式,你總是可以做:
CREATE TABLE my_other_table
(
id serial PRIMARY KEY not null,
my_date varchar(6) default to_char(CURRENT_DATE, 'yyyymm')
);
爲什麼要這麼做?
恕我直言,你應該存儲日期作爲默認類型,如果需要獲取它轉換爲所需的格式。
你可以避開指定列的格式,但有一個視圖。我不知道其他方法。
編輯:
嚴重的是,在我的oppinion,你應該創建一個以日期類型表的視圖。我說的是這樣的:
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。
對。最好使用一個功能:
CREATE OR REPLACE FUNCTION yyyymm() RETURNS text
LANGUAGE 'plpgsql' AS $$
DECLARE
retval text;
m integer;
BEGIN
retval := EXTRACT(year from current_timestamp);
m := EXTRACT(month from current_timestamp);
IF m < 10 THEN retval := retval || '0'; END IF;
RETURN retval || m;
END $$;
SELECT yyyymm();
DROP TABLE foo;
CREATE TABLE foo (
key int PRIMARY KEY,
colname text DEFAULT yyyymm()
);
INSERT INTO foo (key) VALUES (0);
SELECT * FROM FOO;
這給了我
key | colname
-----+---------
0 | 200905
確保您從Unix命令行createlang plpgsql
,如果需要的話。
或者在psql中做「create language plpgsql」,這是所有的createlang所做的。 – araqnid 2009-05-27 12:00:41
萬一米倫A.拉德夫沒有得到周圍張貼他的解決辦法,這是它:
CREATE TABLE foo (
key int PRIMARY KEY,
foo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
感謝大家誰回答,並感謝那些誰給我的函數格式的想法,我真的會研究它以備將來使用。
但是對於這種明顯的情況,'特殊yyyymm字段'不被視爲日期字段,而只是作爲標籤,o用於匹配正確的年份研究值的任何內容;已經有另一個日期字段,擁有完整的時間戳,但如果我需要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)
進行查詢,如果發現運行緩慢,請爲此添加索引表達式。
- 1. 所有設置默認值Rails的,像這樣的路線
- 2. PostgreSQL的COALESCE不設置默認值
- 3. 如何將數組設置爲像definited一樣的默認值?
- 4. 如何設置默認值
- 5. 如何設置默認值?
- 6. 設置默認值
- 7. 設置默認值
- 8. 設置默認值
- 9. 設置默認值
- 10. 設置默認值
- 11. 設置默認值
- 12. 設置默認值
- 13. 設置默認值
- 14. 設置默認值
- 15. 設置默認值
- 16. 設置默認值
- 17. 設置默認值
- 18. 設置默認值
- 19. 設置默認值
- 20. 設置默認值
- 21. 設置默認值
- 22. Openerp - 如何設置fields.binary的默認值?
- 23. 如何設置@RequestMapping的默認值?
- 24. 如何設置md-select的默認值?
- 25. 如何設置comboBox的默認值?
- 26. 如何設置默認值的MySQL
- 27. 如何設置DataTables的默認sEmptyTable值?
- 28. 如何設置ListPreference的默認值
- 29. 如何設置make的默認值?
- 30. 如何設置GetOpt的默認值?
因爲我需要它。我有一個PHP應用程序,運行並查詢數據庫與'200801','200802'等''yyyymm',以檢索數據的 - 我想你有它作爲默認值會更好,然後SELECT fiels FROM table WHERE column BETWEEN timestamp1 AND timestamp2 – Strae 2009-05-26 14:00:44
我會用我添加到我的回覆中的解決方案來做到這一點。 – 2009-05-27 11:51:52