Cela semble une solution facile, mais je n'arrive pas à comprendre pourquoi cela ne fonctionne pas pour moi. J'ai une colonne qui a des données comme ceci:
DateField
----------
12/16/2016
11/06/2016
Tout ce que je veux faire est de convertir varchar
en une colonne date
, mais j'obtiens cette erreur:
La conversion a échoué lors de la conversion de la date et/ou de l'heure d'une chaîne de caractères.
Voici ma requête simple:
select convert (date, DateField) as convertedField
from myTable
Rien de mal avec les deux exemples que vous avez donnés. Certaines dates incorrectes dans votre table ne peuvent pas être converties en date.
Utilisez la fonction TRY_CONVERT
pour les mauvaises dates, elle retournera NULL
select TRY_Convert(date,DateField)
From myTable
Vous devez toujours stocker les dates dans le type de données DATE/DATETIME
.
Si vous voulez voir les enregistrements qui ne peuvent pas être convertis en date, alors
select DateField
From myTable
Where TRY_Convert(date,DateField) IS NULL
Si vous travaillez avec un format de date spécifique tel que mm/dd/yyyy
Vous pouvez le spécifier dans la fonction Convert()
comme suit
CONVERT(DATETIME,DATAFIELD,101)
Si cela ne fonctionne toujours pas, utilisez TRY_CONVERT()
pour connaître les lignes générant cette exception:
SELECT *
FROM TBL
WHERE TRY_CONVERT(DATETIME, DATAFIELD, 101) IS NULL
Cela retournera les lignes qui ne peuvent pas être converties
TRY_CONVERT()
retournera NULL
si la conversion a échoué
En savoir plus sur les formats DateTime ici: SQL Server CONVERT () Tutoriel de fonction
Vous devez spécifier le format de date et heure lors du formatage. La date dans votre tableau est actuellement au format U.S, vous devez donc passer le troisième argument 101 dans votre fonction convert.
SELECT CONVERT(date,[DateField],101) FROM myTable;
Travailler Fiddle ici http://rextester.com/NYKR49788
Plus d'informations sur le style date/heure ici: https://msdn.Microsoft.com/en-us/library/ms187928.aspx