Каков эквивалент string в Postgresql.Format(“{0:s}”, DateTime.Now)?

StackOverflow https://stackoverflow.com/questions/680086

  •  22-08-2019
  •  | 
  •  

Вопрос

Что эквивалентно сортируемому datetime / timestamp varchar в PostgreSQL?

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

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

2000-05-04T15:30:59

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

Обратите внимание, я знаю, что дата сортируется сама по себе, я просто сталкиваюсь с несовместимостью даты и времени между ними .NET и Mono, поэтому я просто передам (удаленно) типы date / timestamp как varchar, базовый тип базы данных по-прежнему является правильным типом поля date / timestamp .Для тех, кто сталкивается с такой же проблемой, обходной путь заключается в приведении даты к 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

Конечно, постоянное напоминание об использовании 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)

Другие советы

Или просто:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top