Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму... / 4 сообщений из 4, страница 1 из 1
01.06.2019, 22:59
    #39821216
PowRTocH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...
В сети нашел любопытный вариант преобразования INT в бинарную строку:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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!
...
Рейтинг: 0 / 0
02.06.2019, 03:52
    #39821247
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...
PowRTocH,

Читайте в документации
Precision, scale, and Length
Data type precedence
...
Рейтинг: 0 / 0
02.06.2019, 11:52
    #39821278
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...
PowRTocHК примеру, CAST((5/2) AS INT) возвращает 3!У вас не MSSQL
...
Рейтинг: 0 / 0
02.06.2019, 14:48
    #39821313
PowRTocH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму...
Почитал =)

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

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

Нюансы в поведении этих СУБД.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбираю рекурсию для перевода INT в бинарную строку (23 = 10111). Не пойму... / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]