O que é o equivalente Postgresql de string.Format ( “{0: s}”, DateTime.Now)?

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

  •  22-08-2019
  •  | 
  •  

Pergunta

O que é o equivalente a datetime classificáveis ??/ varchar timestamp no PostgreSQL?

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

saída de formato de amostra:

2000-05-04T15:30:59

Isso funciona, SELECT agora :: varchar, a saída é '2009-03-25', mas apenas para o tipo de data, perguntando o que é o equivalente para timestamp.

Note, eu sei que data é classificável em si, eu só encontrar uma incompatibilidade DateTime entre .NET e Mono, então eu só vou transportes (Remoting) Data / tipos timestamp como varchar, subjacente tipo de banco de dados ainda é a data apropriada / tipo de campo timestamp. Para aqueles que encontrar esse mesmo problema, a solução alternativa é lançar a data para varchar ao recuperar os dados, e lançando a volta varchar a data ao salvar.

Foi útil?

Solução

Basicamente, você só usar to_char função.

O problema com o seu exemplo, é que, embora teoricamente este deve funcionar:

select to_char( now(), 'YYYY-MM-DDTHH24:MI:SS' );

Na realidade - PostgreSQL não pode "entender" que T é separador e HH24 é próxima "tag", e imprime como:

2009-03-24THH24:32:45

Mas você pode mudá-lo de forma relativamente simples para:

select translate( to_char( now(), 'YYYY-MM-DD HH24:MI:SS' ), ' ', 'T' );

Que resultados solicitado formato:

2009-03-24T21:33:21

É claro que lembrar sempre de usar traduzir fica velho muito rápido, então em vez disso você pode criar sua própria função e usá-lo em vez disso:

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)

Outras dicas

Ou simplesmente:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top