web-dev-qa-db-fra.com

MySQL - Comment analyser une valeur de chaîne au format DATETIME dans une instruction INSERT?

J'ai un MySQL database, avec une colonne de type date DATETIME.

Je reçois une valeur de chaîne pour une date/heure à partir d'une application externe. Cette valeur de chaîne ressemble à ceci:

'5/15/2012 8:06:26 AM'

MySQL génère une erreur sur l'INSERT: "Error. Incorrect datetime value". Ma solution de contournement consistait à modifier le type de colonne en VARCHAR, ce qui fonctionne, mais j'ai vraiment besoin des données comme date et heure appropriées pour une utilisation future.

J'ai recherché un formatage accepté pour MySQL DATETIME valeurs et trouvé que MySQL veut que le format DATETIME soit comme 'YYYY-MM-DD HH:MM:SS'.

Je ne peux pas modifier l'application externe pour reformater la chaîne de date/heure dans un format, donc ma seule chance est de la gérer.

Je pense que ce que je dois faire, c'est analyser la chaîne existante en utilisant MySQL syntax, à l'intérieur de mon instruction INSERT, mais je ne sais pas comment faire cela. J'ai une idée qu'il me faut utiliser une clause SELECT, peut-être STR_TO_DATE, en quelque sorte en combinaison avec mon instruction INSERT.

Voici ma déclaration INSERT actuelle. J'ai supprimé les autres champs qui ne posent pas de problème, juste pour rendre l'exemple propre.

INSERT INTO tblInquiry (fldInquiryReceivedDateTime) VALUES ('5/15/2012 8:06:26')

Merci pour toute aide, je suis un débutant SQL.

42
Tim Murphree

Utilisez la fonction STR_TO_DATE()) _ de MySQL pour analyser la chaîne que vous essayez d'insérer:

INSERT INTO tblInquiry (fldInquiryReceivedDateTime) VALUES
  (STR_TO_DATE('5/15/2012 8:06:26 AM', '%c/%e/%Y %r'))
88
eggyal