2009-03-25 8 views
0

Quel est l'équivalent de datchar/timestamp varchar dans PostgreSQL?Quel est l'équivalent Postgresql de string.Format ("{0: s}", DateTime.Now)?

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 triable en soi, je viens de rencontrer une incompatibilité DateTime entre .NET et Mono, donc je vais juste transporter (Remoting) types date/timestamp comme varchar, le type de base de données sous-jacente est toujours correct Type de champ Date/Horodatage. Pour ceux qui rencontrent ce même problème, la solution consiste à convertir la date en varchar lors de la récupération des données et à renvoyer le fichier varchar à jour lors de la sauvegarde.

Répondre

4

Fondamentalement, vous utilisez juste to_char fonction.

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 souvenir toujours d'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) 
+0

salut depesz, tout d'abord, merci pour la réponse :-) Je sais que vous êtes un demi-dieu avec postgresql, je lis souvent votre blog. Quelle est l'expression concise pour cette comparaison? http://stackoverflow.com/questions/680824/sql-equality-inequality-comparison-with-nullable-values ​​ – Hao

+0

Tout comme Milen a écrit - EST DISTINCT FROM et n'est peut-être PAS DISTINCT DE. –

4

Ou simplement:

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

Génial. Je n'ai pas remarqué le "" truc dans les docs. –

Questions connexes