Tour postgres représentation de la date dans le format ISO 8601 chaîne
Je suis en train de formater une Postgres représentation de la date dans un format ISO 8601 chaîne. Je suis en supposant qu'il existe une Postgres fonction qui peut le faire, mais j'ai trouvé la documentation court sur des exemples.
Ma requête est
SELECT
now()::timestamp
qui renvoie
[{{2016, 8, 9}, {3, 56, 55, 754181}}]
J'essaye de mettre la date dans un format qui ressemble plus à
2016-8-9T03:56:55+00:00
.
Quelles modifications dois-je apporter à ma requête pour le faire? Merci pour votre aide.
Lors de la publication de Débordement de Pile, gardez votre exemple de scénario et le code aussi simple que possible. Votre complexe de la requête n'est pas pertinent pour la question de formatage d'une date-heure. Une seule ligne pour SÉLECTIONNER le moment actuel est suffisant pour illustrer le problème.
J'ai simplifié.
Spécifiez l'info/tag sur quel logiciel vous utilisez pour vous connecter/requêtes PostgreSQL.
J'ai simplifié.
Spécifiez l'info/tag sur quel logiciel vous utilisez pour vous connecter/requêtes PostgreSQL.
OriginalL'auteur CallMeNorm | 2016-08-08
Vous devez vous connecter pour publier un commentaire.
Je pense que j'ai trouvé un moyen de faire la mise en forme, mais ce n'est pas idéal parce que je suis en train d'écrire la mise en forme moi-même.
Voici une solution possible:
Dans mon cas, j'ai besoin aussi bien les millisecondes donc, vous avez juste besoin de les ajouter .MS après l'secondes.
to_char (now()::timestamp at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')
Pour que tout cela fonctionne, j'ai besoin de jeter
now()
àtimestamptz
plutôt quetimestamp
.OriginalL'auteur CallMeNorm
Peut-être pour quelqu'un qu'il pourrait être utile de savoir que, depuis Postgresql 9.4
to_json
fonction (ainsi querow_to_json
) convertit également le timestamp d'un bon format ISO 8601, mais en plus il encapsule une valeur entre guillemets, ce qui pourrait ne pas être souhaitable:to_json(now())
n'a pas leT
dans Postgresql 9.3merci pour cette remarque, j'ai ajouté à la réponse: "depuis 9.6" si je n'ai pas essayé d'exécuter la requête en 9.5 et 9.4.
c'est bien dans 9.4 et 9.5, seulement 9,3 a le T étrangeté
Il a obtenu, correction de la description, merci encore, @cdmckay
Grande réponse pour PG9.4+
OriginalL'auteur Dattaya
Seule fonction a fonctionné pour moi parce que vous avez besoin pour définir le fuseau horaire.
Avoir de valeur par défaut fuseau horaire avec la zone:
Créer la fonction:
Et de sortie:
Regarder cette aussi:
sql
lang insted deplpgsql
.select ret from (select set_config('timezone', tzone, true), to_char(tstamp, mask) ret) t;
pastebin.com/EC9KPfZ7OriginalL'auteur rofrol
Définir la
timezone
variable de session à quel fuseau horaire vous voulez la sortie, puis utilisezto_char(now(), 'YYYY-MM-DD"T"HH24:MI:SSOF')
Si vous utilisez
at time zone '...'
être conscient que cette bande de hors informations sur le fuseau horaire, et supposons que l'utilisateur connaît déjà le fuseau horaire.Si vous utilisez
at time zone 'UTC'
alors la sortie doit toujours être à l'heure UTC, avec le bon fuseau horaire de l'information (pas de décalage).Ce blog donne tout à fait une explication détaillée.
OriginalL'auteur Hugh
C'est un laconique façon de "tourner un PostgreSQL représentation de la date dans un format ISO 8601 chaîne":
Il utilise le
#>>
opérateur en combinaison avec lato_json()
fonction, qui peut à la fois être trouvé sur cette page:https://www.postgresql.org/docs/current/functions-json.html
L'opérateur "[s] objet JSON au chemin d'accès spécifié comme texte". Toutefois, lorsque vous spécifiez un tableau vide littérale
'{}'
que le chemin d'accès, il spécifie l'objet racine.Comparer cette méthode à une méthode similaire comme:
C'est plus courte, mais produit les mêmes résultats.
OriginalL'auteur adjenks