2017-08-01 4 views
1

J'essaie de convertir une chaîne varchar (255) (dp.Date) au format jj/mm/aaaa (01/08/2017) à date/heure au format aaaa-mm-jj (2017-08-01).Convertir jj/mm/aaaa VARCHAR en aaaa-jj-mm DATETIME en SQL

J'ai essayé d'utiliser CONVERT (DATETIME, dp.Date, 120), mais je me retrouve avec le « La conversion d'un type de données char à un type de données datetime donné une valeur hors de portée valeur datetime. ' message d'erreur.

Merci à l'avance,

+2

Vous devez utiliser 'CONVERT' pour lui donner un format, pas' CAST': convert (DATETIME, dp.Date, 120) ' – Lamak

+0

désolé, je voulais écrire .. CONVERT Comme vous pouvez le voir, j'ai aussi utilisé la syntaxe pour CONVERT ... édité le post ... merci pour les heads up! –

+0

Ensuite, vous avez des chaînes qui sont hors de portée pour une date (comme '05/15/2017') – Lamak

Répondre

0

J'ai réussi à le résoudre en utilisant CAST + SUBSTRING.

coulé (sous-chaîne (dp.Date, 7,4) + substring (dp.Date, 4,2) + substring (dp.Date, 1,2) AS datetime)

0

Vous pouvez essayer avec PARSENAME comme ci-dessous. Exécution avec des données de l'échantillon:

DECLARE @TestTable TABLE (Id INT, [Date] VARCHAR (255)); 

INSERT INTO @TestTable (Id, [Date]) VALUES 
(1, '01/08/2017'), (2, '21/09/2017'), (3, '15/12/2017'); 

SELECT CAST(
      CONCAT(PARSENAME(DateValue, 1), '-', 
        PARSENAME(DateValue, 2), '-', 
        PARSENAME(DateValue, 3)) 
     AS DATETIME) AS [Date] 
FROM (
    SELECT REPLACE([Date], '/', '.') AS DateValue FROM @TestTable 
) D