的年給出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