Quel est l'équivalent Postgresql de string.Format ( « {0: s} », DateTime.Now)?
-
22-08-2019 - |
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.
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');