2015-07-20 40 views
-3

我需要将日期格式从yyyy-mm-dd更改为dd/mm/yyyy,但我需要保留该列的日期类型。到目前为止,我已经使用这种方法来正确地更改格式,但将列类型从日期转换为文本。更改日期格式而不投射到文本?

TO_CHAR(mydate::TIMESTAMP WITH TIME ZONE, 'dd/mm/yyyy'::TEXT) ; 

我该如何保持日期类型?

+4

日期类型的全部概念是它以便于数据库的方式存储(例如,用于排序和过滤)。输出数据时应该进行格式设置。 – Glorfindel

+2

关系数据库中的日期时间值通常以二进制格式存储,并以数据库预定义的格式描述。所以,如果您想以不同的方式描述它,必须将其转换为字符值,并提供与查询中所做的不同的格式。 –

+0

我完全理解......我有一个框架的问题,有助于建立一个网站形式的查询(有点长,在这里解释...)。我只是想确保这样的转变是否可能,这会让我更容易。 – wiltomap

回答

0

这是一个误解。
如果您的数据类型为date,则将其存储为而不使用格式。它只是一个自2000年以来计数秒数的4字节整数。

您可以在显示给客户端时以任何方式对其进行格式化。

SELECT to_char(mydate, 'yyyy-mm-dd') AS one_way 
     ,to_char(mydate, 'dd/mm/yyyy') AS other_way 

'yyyy-mm-dd'恰好是ISO 8601的格式,这是许多区域设置的默认文本表示。

你总是可以创建一个VIEW与日期的文本表示:

CREATE VIEW v_tbl_with_date_foramt AS 
SELECT id, some_column, to_char(mydate, 'dd/mm/yyyy') AS mydate_text 
FROM tbl; 

但现在它是一个text列,而不是date列。

datestyle负责输入日期文字的解释方式。

LC_TIME规定日期/时间函数如何表现。

默认显示是ISO 8601:'yyyy-mm-dd'

+0

谢谢......但我需要一个DATE类型的列,日期显示为dd/mm/yyyy。到目前为止,我能做的越多,就是通过TEXT列显示日期为yyyy-mm-dd(默认)或dd/mm/yyyy。 – wiltomap

+0

@wiltomap:关键是数据类型'date'完全独立于它的显示方式。默认文本表示形式由您的语言环境决定。或者你可以使用'to_char()'来获得一个特定的格式。结果是'文本'(代表日期),但不是'日期'。 –