Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...  [new]
PowRTocH
Member

Откуда:
Сообщений: 10
В сети нашел любопытный вариант преобразования INT в бинарную строку:

WITH ctebins 
     AS (SELECT num AS num_orig, 
                num  AS working_level, 
                Cast('' AS VARCHAR(max)) AS binval 
         FROM   nums_bin 
         UNION ALL 
         SELECT c.num_orig, 
                c.working_level / 2, 
                Cast(c.working_level % 2 AS VARCHAR(max)) 
                + c.binval 
         FROM   ctebins c 
         WHERE  c.working_level > 0) 
SELECT num_orig, 
       binval 
FROM ctebins 
WHERE working_level = 0; 


По ходу стал разбирать, как запрос работает и кое-что вызвало вопрос.

Почему c.working_level / 2 работает как FLOOR(c.working_level / 2)? То есть, если сейчас значение working_level окажется 5 / 2, то в следующем уровне рекурсии вернется 2.

К примеру, CAST((5/2) AS INT) возвращает 3!
1 июн 19, 22:59    [21899637]     Ответить | Цитировать Сообщить модератору
 Re: Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...  [new]
PizzaPizza
Member

Откуда:
Сообщений: 280
PowRTocH,

Читайте в документации
Precision, scale, and Length
Data type precedence
2 июн 19, 03:52    [21899692]     Ответить | Цитировать Сообщить модератору
 Re: Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...  [new]
invm
Member

Откуда: Москва
Сообщений: 8739
PowRTocH
К примеру, CAST((5/2) AS INT) возвращает 3!
У вас не MSSQL
2 июн 19, 11:52    [21899742]     Ответить | Цитировать Сообщить модератору
 Re: Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...  [new]
PowRTocH
Member

Откуда:
Сообщений: 10
Почитал =)

Забыл упомянуть…

Я переносил этот скрипт на MySQL, оказалось, к примеру CAST(2.85 AS INT) в MySQL возвращает 3, а SQL Server возвращет 2. То есть последний ничего не придумывает, а просто забирает целочисленную часть.

Нюансы в поведении этих СУБД.
2 июн 19, 14:48    [21899805]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить