作为标题,我如何设置表格的列以默认值为当前年份和月份,格式为“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