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

НоDatetime преобразование в SQL Server

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

Msg 241, Level 16, State 1, Line 5
Конверсии удалась при преобразовании даты и/или времени из строки символов.

дает ошибки. Но и int @v2 и char @v2 имеют то же значение?

+0

'int @ v2' и' char @ v2' не имеют того же значения. у одного есть int, а у одного есть char – ethorn10

+0

ethorm10: мой вопрос в том, почему чат не преобразуется, а с другой стороны int gets.if вы меняете val2 char (2) = '2' на val2 char (10) = '20130104' чем это не дает ошибки. – user1947491

+0

Почему вы произвольно добавляете значения разных типов? Какой результат вы ожидаете? Если вы действительно хотите добавить '2' в значение' datetime', вы уже нашли способ сделать это. –

ответ

0

, когда символ был преобразован в DateTime .. это, как правило, false..because некоторые символы не могут быть преобразованы в datetime..and может overflow..just как «2», «а» и т.п ..

вам нужно значение char, которое вроде «2013-01-04» ... они могут быть преобразованы правильно.

3

При объединении двух операторов разных типов вы будете иметь неявное преобразование типа. То, что преобразуется, контролируется правилами Data Type Precedence.

Оба char и int имеет более низкий приоритет, чем DateTime так что ваш запрос является эквивалентом:

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

Кастинг Int значение 2 до datetime прекрасно работает и дает 1900-01-03 00:00:00.000

Кастинг значение обугленного 2 в datetime, однако, не работает, поскольку строка 2 не может быть интерпретирована как допустимое значение даты и времени.

Смежные вопросы