Что такое Postgresql-эквивалент string.Format ("{0: s}", DateTime.Now)? - PullRequest
1 голос
/ 25 марта 2009

Что такое эквивалент сортируемой даты / времени varchar в PostgreSQL?

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

пример формата вывода:

2000-05-04T15:30:59

Это работает, ВЫБЕРИТЕ сейчас :: varchar, вывод «2009-03-25», но только для типа даты, интересно, что эквивалентно метке времени.

Обратите внимание, я знаю, что дата сортируется сама по себе, я просто сталкиваюсь с несовместимостью DateTime между .NET и Mono, поэтому я просто перенесу (Remoting) типы даты / времени как varchar, базовый тип базы данных все еще является подходящей / тип поля времени. Для тех, кто сталкивается с этой же проблемой, обходной путь - приведение даты к varchar при получении данных и приведение varchar к дате при сохранении.

Ответы [ 2 ]

5 голосов
/ 25 марта 2009

В основном вы просто используете функцию 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)
4 голосов
/ 25 марта 2009

Или просто:

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