Convertir varchar JJMMAAAA à JJ/MM/AAAA type datetime et sélectionnez la date la plus récente seulement
Ok, donc j'ai une sorte de bizarre... les dates dans le tableau ont été inscrits en tant que chaîne de valeurs MMDDYYYY
et j'essaie d'avoir l'affiche comme MM/DD/YYYY
dans un rapport, sélectionnez la date la plus récente concernant un ID, car certaines ID peut avoir plusieurs dates.
Exemple de ma table:
ID | MyDate |
------+----------+
1 | 01302014 |
1 | 04222014 |
2 | 01302014 |
Ce que je veux voir quand je les sélectionner et de les insérer dans une table temporaire est présent:
ID | MyDate |
------+-----------+
1 | 4/22/2014 |
2 | 1/30/2014 |
Je sais que l'enregistrement des dates comme la chaîne de valeurs est une mauvaise pratique, en particulier lorsque les stockant comme MMDDYYYY
, mais quelqu'un aurait-il une solution à ce cauchemar?
MODIFIER
J'ai oublié de mentionner que certains champs peuvent être NULL. Vous ne savez pas si cela fait une différence ou pas, mais je pense qu'il ne si j'essaie de retourner les dates à l'aide de la Droite, la Gauche, Convertir.
MyDate
colonne est une Date
colonne au lieu de varchar
. Vous avez déjà dit que vous savez que stocker les dates sous forme de chaîne de valeurs est une mauvaise pratique - alors pouvez-vous résoudre ce problème? Une fois que vous avez fait cela, tout le reste devient beaucoup plus facile. S'attaquer à la source du problème plutôt que de le son le plus immédiat des symptômes.Plus une seule recommandation que je puisse vous donner est de ne jamais jamais jamais jamais stocker des dates comme des chaînes de caractères. Au-delà de cela. Temporairement CAST le Madate à un type de données de date et d'utiliser ensuite les CONVERTIR pour la mettre dans le format que vous voulez.
Je voudrais avoir cette autorité. Je l'ai mentionné à d'autres que je pourrais aller de l'avant et de changer toutes les dates appropriées de format de date, mais ils veulent le garder comme varchar pour la façon dont les dates sont entrées dans par le biais de l'indexation des logiciels.
Si vous ne pouvez pas dire à eux, de les faire pointer vers ce commentaire de la mine ici maintenant: Ils sont idiots. Pure idiots.
Je ne pense pas qu'il mérite un downvote de l'OMI.
OriginalL'auteur Jaron Cook | 2014-04-25
Vous devez vous connecter pour publier un commentaire.
Cette question est depuis près d'un an, l'écrou probablement quelqu'un peut trouver utile.
Vous devez
CONVERT
votre chaîne àDATE
format et l'utilisation d'unROW_NUMBER
fonction de la fenêtre de votre jeu de résultats.Create table
Des données de l'échantillon
Requête
SQLFiddle Démo
OriginalL'auteur sqluser
Vous pouvez essayer ceci:
OriginalL'auteur Dimitris Kalaitzis
OriginalL'auteur huMpty duMpty
D'abord faire une conversion à un
datetime
type de données, puis de le convertir en un format que vous souhaitez:Bien que je ne comprends pas pourquoi en serait-il pas suffisant de simplement convertir il ne
datetime
et de laisser la mise en forme où il appartient, au client.OriginalL'auteur dean
Cela signifie que la valeur stockée dans le tableau ne peuvent pas être convertis en datetime. C'est pourquoi les valeurs de date ne doit pas être stockés sous forme de chaînes comme il n'existe aucune garantie que la valeur entrée correspond à une date valide de type valeur .Utilisation isdate() pour vérifier qui sont ces valeurs
OriginalL'auteur Mudassir Hasan
La solution la plus simple est mySQL str_to_date() fonction.
Ce sera le convertir en un DATETIME qui vous puis la présentation requise
OriginalL'auteur David Soussan
À l'aide d'un CONVERTIR comme l'extrait de code suivant fonctionne sur n'importe quel Serveur SQL indépendamment de la langue et/ou les paramètres régionaux de configuration.
OriginalL'auteur dmarietta
Requête Complète:
OriginalL'auteur Mayank
Ceci est une version modifiée de Dimitris Kalaitzis réponse.
Tout d'abord, vous devez convertir votre Madate en Chaîne. Les données par exemple (01302014) n'est pas traité comme une chaîne et le zéro sera supprimé lorsque vous convertissez. Par conséquent, l'utilisation de lancer pour vous Madate comme une Chaîne de caractères et d'ajouter un 0 à elle. Ensuite, vous trouverez le 8 caractères afin de se débarrasser du zéro pour le mois d'octobre à Décembre.
Voici le code qui devrait fonctionner pour vous:
Espère que cette aide.
OriginalL'auteur ian0411
Vous devez d'abord ajouter les barres obliques pour être en mesure de le convertir à une date, utilisez des TRUCS
Puis de le convertir en une DATE et sélectionnez le MAX group by ID
Requête:
OriginalL'auteur Joe Hh