Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 конвертация bigint const в binary(8). Где ошибка?  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 6030
Господа, помогите разобраться, пожалуйста, где ошибка.
Выполняю скрипт на 2008R2 (10.50.400) и на 2012 (11.0.5058)

declare @i bigint
set @i = 2147483648
select 
@i [@i], 
cast(@i as binary(8)) [cast(@i as binary(8))], 
CAST(2147483648 as binary(8)) [CAST(2147483648 as binary(8))], 
CONVERT(binary(8), 2147483648) [CONVERT(binary(8), 2147483648)],
cast(cast(214748368 as bigint) as binary(8)) [cast(cast(214748368 as bigint) as binary(8))]


Результат в файле.

К сообщению приложен файл. Размер - 3Kb
16 янв 15, 22:30    [17130911]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
В последнем столбце в константе ошибка:

есть:         214748368
должно быть: 2147483648

Но вообще, проблема в неявных преобразованиях - они идут не так, как вам хотелось бы:
select
	CAST(2147483648 as binary(8)) as [Numeric_Implicit],
	cast(cast(@i as numeric(10,0)) as binary(8)) as [Numeric_Explicit];
Посмотрите хелп по bigint, там все это расписано.
17 янв 15, 14:09    [17131982]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
select convert ( binary(8), 2147483648, 1)
17 янв 15, 14:34    [17132022]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
aleks2
Guest
@i                   cast(@i as binary(8)) CAST(2147483648 as binary(8)) CONVERT(binary(8), 2147483648) cast(cast(214748368 as bigint) as binary(8))
-------------------- --------------------- ----------------------------- ------------------------------ --------------------------------------------
2147483648 0x0000000080000000 0x0A00000100000080 0x0A00000100000080 0x0000000080000000

Патаму, что 2147483648 НЕ BIGINT.
17 янв 15, 19:19    [17132593]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 6030
Гавриленко Сергей Алексеевич
select convert ( binary(8), 2147483648, 1)


и что из этого по-вашему следует?

convert(binary(8), 2147483648, 1)


выдает к меня так же

0x0A00000100000080

а у вас выдает
0x0000000080000000
?
17 янв 15, 20:58    [17132790]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 6030
aleks2
@i                   cast(@i as binary(8)) CAST(2147483648 as binary(8)) CONVERT(binary(8), 2147483648) cast(cast(214748368 as bigint) as binary(8))
-------------------- --------------------- ----------------------------- ------------------------------ --------------------------------------------
2147483648 0x0000000080000000 0x0A00000100000080 0x0A00000100000080 0x0000000080000000

Патаму, что 2147483648 НЕ BIGINT.


Ткните меня плиз в BOL где внятно написано, во что преобразует T-SQL константу 2147483648.
17 янв 15, 21:04    [17132805]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 6030
Ennor Tiegael,

большое спасибо
17 янв 15, 21:08    [17132823]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Владимир Штепа
Ткните меня плиз в BOL где внятно написано, во что преобразует T-SQL константу 2147483648.
http://msdn.microsoft.com/en-us/library/ms187745.aspx
Integer constants greater than 2,147,483,647 are converted to the decimal data type, not the bigint data type.
17 янв 15, 21:11    [17132829]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 6030
invm,

Большое спасибо. До этого искал в разделе константы ;-(
17 янв 15, 22:36    [17132973]     Ответить | Цитировать Сообщить модератору
 Re: конвертация bigint const в binary(8). Где ошибка?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Владимир Штепа
Ткните меня плиз в BOL где внятно написано, во что преобразует T-SQL константу 2147483648.
Откройте для себя тип sql_variant и функцию sql_variant_property(), чтобы в следующий раз не гадать, какого типа то или иное выражение или константа.
18 янв 15, 02:26    [17133510]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить