#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 — воскресенье