1

PostgreSQL 中可排序的日期时间/时间戳 varchar 的等价物是什么?

Console.WriteLine("{0:s}", DateTime.Now);

样本格式输出:

2000-05-04T15:30:59

这有效,SELECT now::varchar,输出为“2009-03-25”,但仅适用于日期类型,想知道时间戳的等价物是什么。

请注意,我知道日期本身是可排序的,我只是遇到了.NET 和 Mono 之间的 DateTime 不兼容,所以我将传输(远程处理)日期/时间戳类型作为 varchar,底层数据库类型仍然是正确的日期/时间戳字段类型。对于那些遇到同样问题的人,解决方法是在检索数据时将日期转换为 varchar,并在保存时将 varchar 转换回日期。

4

2 回答 2

5

基本上你只使用 to_char 函数。

你的例子的问题是,虽然理论上这应该有效:

select to_char( now(), 'YYYY-MM-DDTHH24:MI:SS' );

实际上 - PostgreSQL 无法“理解” T 是分隔符而 HH24 是下一个“标签”,并将其打印为:

2009-03-24THH24:32:45

但是您可以相对简单地将其更改为:

select translate( to_char( now(), 'YYYY-MM-DD HH24:MI:SS' ), ' ', 'T' );

输出请求的格式:

2009-03-24T21:33:21

当然,记住总是使用 translate 很快就会过时,因此您可以创建自己的函数并使用它来代替:

create function custom_ts(timestamptz) returns text as $$
  select translate( to_char( $1, 'YYYY-MM-DD HH24:MI:SS' ), ' ', 'T' );
$$ language sql;
# select custom_ts(now());
      custom_ts
---------------------
 2009-03-24T21:35:47
(1 row)
于 2009-03-25T04:36:15.077 回答
4

或者简单地说:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS');
于 2009-03-25T10:29:06.927 回答