什么是PostgreSQL的当量的String.format的(“{0:S}”,DateTime.Now)?
-
22-08-2019 - |
题
什么是可排序的日期时间/时间戳VARCHAR的PostgreSQL中等效?
Console.WriteLine("{0:s}", DateTime.Now);
样本格式输出:
2000-05-04T15:30:59
这工作,选择立即:: 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)
其他提示
或者干脆:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS');
不隶属于 StackOverflow