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转换回来。
答案 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');