Как найти значения — это сумма того, что все дни

#sql

#sql

Вопрос:

У меня есть столбец, в котором мы храним сумму выбранных значений даты .. например, у меня есть фиксированное значение даты ниже

 1  Sunday
2  Monday
4  Tuesday
8  Wednesday
16 Thursday
32 Friday
64 Saturday
  

в моей колонке я получаю 12, поэтому ясно, что пользователь выбрал (4)Tuesday (8)Wednesday=12

теперь у меня есть 106, какую логику я могу написать, чтобы узнать, какая это комбинация дней?

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

1. Какую СУБД вы используете? Побитовые операторы поддерживаются не во всех СУБД.

Ответ №1:

 SELECT *,
  ( (SelDates amp;  1) =  1) AS IsSun,
  ( (SelDates amp;  2) =  2) AS IsMon,
  ( (SelDates amp;  4) =  4) AS IsTue,
  ( (SelDates amp;  8) =  8) AS IsWed,
  ( (SelDates amp; 16) = 16) AS IsThu,
  ( (SelDates amp; 32) = 32) AS IsFri,
  ( (SelDates amp; 64) = 64) AS IsSat
FROM <table>
  

Это должно работать как в MySQL, так и в SQL-сервере, поскольку они оба поддерживают amp; побитовый оператор AND .

Ответ №2:

Вы можете проверить это следующим образом (MS SQL, побитовый И):

 SELECT 
CASE WHEN (daySum amp; 1) = 1 THEN 'IsMonday' 
CASE WHEN (daySum amp; 2) = 2 THEN 'IsTuesDay' 
CASE WHEN (daySum amp; 4) = 4 THEN 'IsWednesDay' 
... etc ...
END FROM MyTable
  

Ответ №3:

В MySQL вы можете получить растровое изображение непосредственно с BIN помощью функции

 SELECT LPAD(BIN(106), 7,'0') --> 1101010
  

MSB — суббота, LSB — воскресенье