2015-07-20 1 views
-3

Je dois changer le format de la date de yyyy-mm-dd à dd/mm/yyyy, mais je dois conserver le type de date pour la colonne. Jusqu'à présent, j'ai utilisé cette méthode qui modifie le format correctement, mais transforme le type de colonne de la date en texte.Changer le format de la date sans le transtyper en texte?

TO_CHAR(mydate::TIMESTAMP WITH TIME ZONE, 'dd/mm/yyyy'::TEXT) ; 

Comment puis-je le faire avec le type de date?

+4

L'idée générale d'un type de date est qu'il est stocké d'une manière qui convient à la base de données (par exemple pour le tri et le filtrage). Vous devriez faire votre mise en forme lorsque vous produisez les données. – Glorfindel

+2

Les valeurs de date et heure dans les bases de données relationnelles sont généralement stockées au format binaire et sont représentées dans le format prédéterminé par la base de données. Donc, si vous souhaitez le représenter différemment, vous devez le transformer en valeur de caractère et fournir le format différent comme vous le faites dans votre requête. –

+0

Je comprends parfaitement ... J'ai un problème avec un framework qui aide à construire des requêtes pour un formulaire de site web (un peu long à expliquer ici ...). Je voulais juste m'assurer qu'une telle transformation était possible ou non, cela m'aurait rendu la tâche plus facile. – wiltomap

Répondre

0

Ceci est un malentendu.
Si votre type de données est date, alors il est enregistré sans le format. Il s'agit juste d'un entier de 4 octets comptant des secondes depuis 2000.

Vous pouvez le formater de toute façon lors de l'affichage au client.

SELECT to_char(mydate, 'yyyy-mm-dd') AS one_way 
     ,to_char(mydate, 'dd/mm/yyyy') AS other_way 

'yyyy-mm-dd' se trouve être le format ISO 8601, qui est la représentation de texte par défaut dans de nombreux endroits.

Vous pouvez toujours créer un VIEW avec une représentation textuelle de la date:

CREATE VIEW v_tbl_with_date_foramt AS 
SELECT id, some_column, to_char(mydate, 'dd/mm/yyyy') AS mydate_text 
FROM tbl; 

Mais maintenant il est une colonne text, pas une colonne date.

datestyle est responsable de la façon dont les littéraux de date d'entrée sont interprétés.

LC_TIME régule le comportement des fonctions date/heure.

L'affichage par défaut est la norme ISO 8601: 'yyyy-mm-dd'.

+0

Merci ... mais j'avais besoin d'une colonne de type DATE avec la date affichée en jj/mm/aaaa. Jusqu'à présent, plus je peux afficher une date comme aaaa-mm-jj (par défaut) ou jj/mm/aaaa dans une colonne TEXT. – wiltomap

+0

@wiltomap: Le fait est que le type de données 'date' est complètement indépendant de la façon dont il est affiché. La représentation textuelle par défaut est déterminée par vos paramètres régionaux. Ou vous pouvez utiliser 'to_char()' pour obtenir un format particulier. Le résultat est un 'text' (représentant une date), cependant, pas un' date'. –