Question

Quel est l'équivalent de varchar datetime / timestamp sortable dans PostgreSQL?

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

format de sortie exemple:

2000-05-04T15:30:59

Cela fonctionne, maintenant SELECT :: varchar, sortie est '2009-03-25', mais seulement pour le type de date, se demandant ce qui est l'équivalent pour l'horodatage.

Remarque, je sais que la date est sortable en lui-même, je rencontre juste une incompatibilité DateTime entre .NET et Mono, donc je vais juste transport (Remoting) Date / types d'horodatage comme varchar, sous-jacente type de base de données est toujours bonne date / type de champ d'horodatage. Pour ceux qui rencontrent ce même problème, le travail autour est de jeter la date à varchar lors de la récupération des données, et la coulée du varchar retour à ce jour lors de l'enregistrement.

Était-ce utile?

La solution

Fondamentalement, vous utilisez simplement la fonction to_char.

Le problème avec votre exemple, est que si théoriquement cela devrait fonctionner:

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

En réalité - PostgreSQL ne peut « comprendre » que T est séparateur et HH24 est à côté « tag », et l'imprime comme:

2009-03-24THH24:32:45

Mais vous pouvez changer relativement simplement:

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

qui délivre le format demandé:

2009-03-24T21:33:21

Bien sûr, se souvenant toujours utiliser la traduction vieillit assez rapidement, donc au lieu que vous pouvez créer votre propre fonction et de l'utiliser à la place:

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)

Autres conseils

Ou simplement:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top