Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Странное поведение LEN(varbinary)  [new]
Igor Kuzmichev
Member

Откуда: Moscow, Russia
Сообщений: 5
Друзья, доброго времени суток!

Столкнулся со странным поведением LEN(varbinary)
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)   Jun 28 2012 08:36:30   Copyright (c) Microsoft Corporation  Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 

declare @b varbinary(max)=0xFE7C2FA629A6FD1E64A068EF96298AC2CDBCAE2BDF289E307B08AB1BBCC93C8EE8F34F7F13429A1F42738E565307E5FCFBEA13E96D61AAAA41D565C870E270E7BC24D4F750D616292E8E36FA36C2E72B65E861C3E4C5A76FE09A396FCB2001340CD0C96110A394882264142B7585D9D14077DAE65C29E5016814C10630402C10130406C100B0408C100B0403FF09500E50BFA57E98DFCD6F25A6BBE9A6FD1F2E583B35B3D130B944DAD57201AED88AD94829FF19BB284D795CD7E2505165C6884B353E05B26EAC98776FAA89CB9D7A3E2914EDC1659938214AFEFFF176694464E5E6AED757EC26684B5DCCFD9684E897C095F2F9D1269018504B21C9304A27C9ABD5F1326BAC6FB57E562E74A5E4CA0298ABA47EE6175EDD099B67939A44B9D9ADCE8FE3B363A38BDB480EA6A086745A3884C44E7D5DBA53AF7424CFC7640E712C0518C8A2A828414A49A6964CED61B6EF4EFFBFF252D422E598D1D1864CD190B86ECE243E60C804F904428C5405C1D6774AAD78A7B38D75D755140DCD18D6FD8737F9CF550F708C39DC15115E4A49B4C2E60B825D7503D5E0220F36EBE70F0E78C8C1DA039291A00C600A050364078F22D07638214BFEFFF92B346CC462E54997C6FABAD567D7EA2910A605E222BF1765D3D3E01D195C2709022D002B63C1EBED87CB779EB06A06060AADC9B752CDE54925341F6364A616022E58CE08423A2D5377DC6B7722B5095BF6768EAC0867E81EE623244F15571CA081059A440DD3E0A6BF3624590165CED142C1B028AD4E56200E30AF8CD04315173A2A8E855AD70E8C4A4C4F926ED0C145AC04A63302AB5C42DDF126AFE907652C944A6AFBA62225A1967A866D2C8DBBF95EB6C2F656C6C8E1787B17BE7799579BABB1E90750201F112FA023C45F1A0C400138482E95FE2DD1BA36FAA5A0F07000000047019F1974447F00000717CDB7880000030022E91D178A391A2585E5E96712465BD004D8D0CD853713C893D55FE0A841F6FD0C9545820A0BC7AACFF36379C39316431646CECA6C80216ACFFFFFFFFFFF9FA340D830261409830160C0504C180B09428320A04826114B3E3DFCEF3F1CF597AEF27175175BF35D63C1C6AFF5A41C0FD458B82FD2FEDB8D777EFBF0339C856F53F9F0737AC9EFECCEBE915A30B38344BF906E3FDCA946D6BDE3AD856FB0FAD69835F0399A793474D03925102FD611FE8745FD13EB3B144E37877328C8CDC2B5B89480351C54E2E1AAC40EE66186877917DCE5EB9586CD73418ECA12792FBCBBD862F4A19E6D71B1F194FF9915DE7D461DA26CC59E0F2B3E14C59A21803D83DA3F8788146121031C6215545C16B5C4C85C4E922F588412C202D02582016102186046101D8603FF84AABA4C83C2D4F2771EB4AAA08AC1DBAF1ED1443424C33D78CCC9E69E5C68B70C243A8E6C6DE7E13F936CCF;

select LEN(@b)
select LEN(@b+0x19)
select LEN(@b+0x20)
select LEN(@b+0x21)

Результат:
1023
1024
1023
1024

Объясните, пожалуйста, результат 3го select'а. Заранее спасибо!
20 сен 12, 01:09    [13193095]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение LEN(varbinary)  [new]
Igor Kuzmichev
Member

Откуда: Moscow, Russia
Сообщений: 5
Вернее,

select LEN(@b)
select LEN(@b+0x1f)--вместо 0x19
select LEN(@b+0x20)
select LEN(@b+0x21)

Однако не суть, здесь слагаемое больше строковая переменная, чем двоичное число.
20 сен 12, 01:21    [13193133]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение LEN(varbinary)  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Потому что 0x20 -- это пробел. Функция LEN не учитывает хвостовые пробелы. Используйте DATALENGTH.
20 сен 12, 01:40    [13193181]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение LEN(varbinary)  [new]
Igor Kuzmichev
Member

Откуда: Moscow, Russia
Сообщений: 5
invm, cпасибо большое, действительно корректнее использовать DATALENGTH!

Про LEN не догадался, смутил help
LEN (SSIS)
Returns the number of characters in a character expression. If the string includes leading and trailing blanks, the function includes them in the count. LEN returns identical values for the same string of single and double byte characters.
Однако на msdn эта проблема обсуждалась. Виноват, сразу не нашел.
20 сен 12, 09:04    [13193548]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение LEN(varbinary)  [new]
Igor Kuzmichev
Member

Откуда: Moscow, Russia
Сообщений: 5
LEN (Transact-SQL)
Returns the number of characters of the specified string expression, excluding trailing blanks.
Перепутал help :)) Тема закрыта.
20 сен 12, 09:08    [13193564]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить