什么是Postgresql等效的string.Format(“{0:s}”,DateTime.Now)?

时间:2009-03-25 03:06:28

标签: postgresql date varchar

PostgreSQL中的可排序日期时间/时间戳varchar相当于什么?

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

样本格式输出:

2000-05-04T15:30:59

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

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

2 个答案:

答案 0 :(得分:4)

基本上你只是使用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)

答案 1 :(得分:4)

或者简单地说:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS');