PostgreSQL中可排序的datetime / timestamp varchar等效于什么?
Console.WriteLine("{0:s}", DateTime.Now);
样本格式输出:
2000-05-04T15:30:59
这可以工作,现在选择SELECT :: varchar,输出为'2009-03-25',但仅适用于日期类型,想知道时间戳等效于什么。
注意,我知道日期本身是可排序的,我只是遇到.NET和Mono之间的DateTime不兼容,所以我只是将日期/时间戳类型作为varchar传输(远程),底层数据库类型仍然是正确的日期/时间戳字段类型。对于那些遇到相同问题的人,解决方法是在检索数据时将日期转换为varchar,并在保存时将varchar转换为最新。
基本上,您只使用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
当然,记住总是要使用翻译会很快变老,因此您可以创建自己的函数并使用它:
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)