的年给出INT:2009年,2010等
我想转换此信息DATE(一月一日)。PostgreSQL的 - 转换年初至今
我的解决方案(我更喜欢第一个):
(year::char || '-01-01')::DATE
'0001-01-01' + ((year-1)::char || ' year')::interval
有没有更好的(在建),或者更优雅和更快的解决方案?
(我目前正在工作的PostgreSQL 8.4,但也有兴趣在最近的版本。)
的年给出INT:2009年,2010等
我想转换此信息DATE(一月一日)。PostgreSQL的 - 转换年初至今
我的解决方案(我更喜欢第一个):
(year::char || '-01-01')::DATE
'0001-01-01' + ((year-1)::char || ' year')::interval
有没有更好的(在建),或者更优雅和更快的解决方案?
(我目前正在工作的PostgreSQL 8.4,但也有兴趣在最近的版本。)
我觉得这是最简单的方法:
to_date(year::varchar, 'yyyy')
在PostgreSQL中,'text'优于'varchar'。如果我正确阅读PostgreSQL手册,''yyyy''应该是'YYYY'。 – vog 2016-12-12 09:38:20
to_date('01 Jan ' || year, 'DD Mon YYYY')
OR
SELECT (DATE (year || '-01-01'))
裁判:http://www.postgresql.org/docs/current/interactive/functions-formatting.html
注:我没有工作PostgreSQL的
一种可能性:
select year * '1 year'::interval + '0000-01-01'::date;
我喜欢这种方式,因为它避免了文字和整数(一旦所有的常量分析)之间的转换。
SELECT to_date(2011::text, 'YYYY');
注意:根据默认从文本中铸造日期的任何代码是坏的。有人可以将默认格式datestyle更改为某些意想不到的值,并且此代码失败。使用to_date或to_timestamp是非常可取的。 to_date或to_timestamp相对昂贵,但它坚如磐石。
+1 * DateStyle *警告。然而,在这个特定的例子中,是否有任何* DateStyle *输入模式不能正确理解YYYY-MM-DD? ([docs](http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-DATE-TABLE)暗示没有。) – pilcrow 2011-12-29 15:27:45
我希望如此YYYY-MM- DD或YYYYMMDD将在任何地方被解析 - 但不能保证。 – 2011-12-29 16:33:57
问题描述有点松散:PostgreSQL(8.4)没有单参数'to_char()'也没有TINYINT类型。 – pilcrow 2011-12-28 15:24:55
在SQL中,字符串文字是单引号“-01-01”。双引号是为标识符保留的。 – 2011-12-28 19:29:33
看那些引用字符!值的单引号,标识符的双引号(仅适用于模式的部分:列名称等) – araqnid 2011-12-28 19:30:27