Сдвиг битов в SQL-запросе

#mysql #sql #tsql

#mysql #sql #tsql

Вопрос:

У меня есть столбец id в моей таблице C_Log , к которому я хочу применить битовый сдвиг на 32 бита вправо при интеграции этой задачи с остальной частью запроса SELECT!

После применения сдвига битов к идентификатору 6670501767432108171 я должен получить этот номер временной метки 1553097220 (оба десятичные).

Комментарии:

1. Вы используете MySQL, Sybase или MS SQL Server?

2. @jarlh Вероятно… : P (Извините, просто пошутил. Сегодня пятница, вторая половина дня.)

Ответ №1:

В MySQL вы можете напрямую выполнить сдвиг вправо:

 SELECT ..., (id >> 32) AS ts, ... FROM C_log ...
  

В SQL Server нет сдвигов битов, поэтому вам нужно выполнить эквивалентное деление и взять FLOOR :

 SELECT ..., (id / 4294967296) AS ts, ... FROM C_log ...