2013-01-04 7 views
1
declare @v1 datetime = getdate(); 
declare @v2 int = 2; 
select @v1 + @v2; 
--------------------------- 
2013-01-06 08:16:20.620 

Maisconversion Datetime dans SQL Server

declare @v1 datetime = getdate(); 
declare @v2 char(1) = '2'; 
select @v1 + @v2; 
-------------------------- 

Msg 241, niveau 16, état 1, ligne 5
Échec de la conversion date et/ou le temps de chaîne de caractères.

donne une erreur. Mais les deux int @v2 et char @v2 ont la même valeur?

+0

'int @ v2' et' char @ v2' n'ont pas la même valeur. on a un int et on a un char – ethorn10

+0

ethorm10: ma question est pourquoi chat ne se convertit pas alors que d'autre part int gets.if vous changez val2 char (2) = '2' en val2 char (10) = '20130104' que cela ne donne aucune erreur. – user1947491

+0

Pourquoi est-ce que vous additionnez aléatoirement des valeurs de différents types? Quel résultat attendez-vous? Si vous voulez vraiment ajouter '2' à une valeur' datetime', vous avez déjà trouvé un moyen de le faire. –

Répondre

0

lorsque l'omble a été converti en datetime .. il est généralement false..because certains caractères ne peuvent pas être convertis en datetime..and peut overflow..just comme « 2 », « a » etc ..

vous avez besoin d'une valeur char qui, comme "2013-01-04" ... ils peuvent être convertis correctement ..

3

Lorsque vous combinez deux opérateurs de types différents, vous aurez une conversion de type implicite. Ce qui est converti est contrôlé par les règles Data Type Precedence.

Les deux char et int a priorité inférieure à datetime de sorte que votre requête est l'équivalent de:

select @v1 + cast(@v2 as datetime); 

Avec valeur int 2 à un datetime fonctionne très bien et vous donne 1900-01-03 00:00:00.000

casting une valeur char 2 à une date-heure ne fonctionne cependant pas puisque la chaîne 2 ne peut pas être interprétée comme une valeur de date-heure valide.