2017-09-11 2 views
0

J'ai actuellement une chaîne au format dd/mm/yyyy que j'essaye de convertir en une variable datetime en SQL.Convertir en date de jj/mm/aaaa chaîne SQL

J'utilise actuellement cette instruction SQL:

CONVERT(datetime, ProposedTransferDate.AttributeValue, 101) 

mais je reçois une erreur:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Merci

Chris

+2

Marquez les dbms que vous utilisez, 'CONVERT()' est une fonction spécifique au produit. – jarlh

Répondre

6

Vous devez utiliser le masque 103:

CONVERT(datetime,ProposedTransferDate.AttributeValue, 103) 

De this TechOnTheNet article nous constatons que le masque 103 a le format suivant:

dd/mm/yy (British/French standard)

1

Utiliser la manipulation de chaînes pour l'obtenir dans un format yyyy-mm-dd:

CAST(
    RIGHT(ProposedTransferDate.AttributeValue,4) + 
    '-' + 
    RIGHT(LEFT(ProposedTransferDate.AttributeValue,5),2) + 
    '-' + 
    LEFT(ProposedTransferDate.AttributeValue,2) 
AS DATETIME) 
0

Cette erreur de conversion est due à votre date colonne n'est pas format de date SQL/ISO standard et unique qui est AAAA-MM-JJ. votre format de date peut être en MM/JJ/AAAA, donc si votre connexion par défaut Langue UK signifie que le format de date sera comme JJ/MM/AAAA. Donc avant de convertir vous voulez changer la langue par défaut dans SQL Server. This link to show types of languages and learn about SET LANGUAGE(TSQL)

EG

SET LANGUAGE 'british english'  
select convert(date,GETDATE(),103)   ------------use date then it show only date 

vous pouvez utiliser une autre façon aussi

SET LANGUAGE 'british english' 
select DATEPART(dd,'2-3-2012')+ '/' + DATEPART(mm,'2-3-2012')+ '/' + DATEPART(yy,'2-3-2012') 

ou

SET LANGUAGE 'british english' 
select CONCAT(DATEPART(dd,'2-3-2012'), '/' , DATEPART(mm,'2-3-2012'), '/' ,DATEPART(yy,'2-3-2012')) 
0

Essayez ceci:

SELECT convert(datetime, '23/10/2016', 103) 

Résultat: 2016-10-23 00: 00: 00.000