J'ai une donnée numérique dans une colonne 20170930 , j'ai besoin d'aide pour la convertir en date dans PostgreSQL, j'ai essayé plusieurs façons mais cela ne semble pas fonctionner
4 Réponses :
Vous pouvez convertir en une chaîne puis en une date:
select cast(cast(20170930 as text) as date)
Vous pouvez également exprimer cela en utilisant la syntaxe explicite cast () :
XXX
mais lorsque j'utilise :: dans le gestionnaire d'entités Spring, cela me donne une erreur en tant qu'erreur de syntaxe à: ou proche de:
@abhi. . . :: est une syntaxe Postgres tout à fait valide et c'est ce que votre question est balisée. Je ne sais pas pourquoi un «cadre» particulier ne permettrait pas un tel code. Mais vous pouvez facilement le remplacer par l'équivalent cast () .
Utilisez l'un des éléments suivants:
SELECT cast (yourcol :: varchar as date) as dt1, yourcol :: varchar :: date as dt2
où dt1 et dt2 valeurs de type date , et yourcol est une valeur numérique telle que 20170930 < / p>
J'obtiens cette erreur ERREUR: impossible de convertir le type numérique à ce jour Position: 18
excusez-moi, vous avez raison. Je viens de remarquer que votre valeur est de type numérique et devait être convertie en varchar (de type texte) d'abord @abhi, puisque vous avez déjà dit que " j'ai un numérique < / b> données dans une colonne 20170930 ".
maintenant j'obtiens [22007] ERREUR: syntaxe d'entrée non valide pour le type date: "20170930.000000"
J'ai ajouté la démo. Je n'ai pas compris quel pouvait être le problème @abhi
Veuillez essayer la requête ci-dessous
SELECT to_date(column::varchar,'YYYYMMDD')
Le mieux est de changer le type de données de colonne en type Date,
ALTER TABLE table_name
ADD column_name Date;
Comme indiqué ci-dessus, PostgreSQL prend en charge un ensemble complet de types de date et d'heure SQL, comme indiqué dans le tableau ci-dessous. Les dates sont comptées selon le calendrier grégorien. Ici, tous les types ont une résolution de 1 microseconde / 14 chiffres sauf le type de date, dont la résolution est le jour.
La bonne solution à votre problème est de changer le type de données de la colonne en
DATE.