求一个select查询语句

可爱的小莱 2010-05-25 11:59:01

假如 111 111 1 (二进制表示 右 低位-> 左边 高位)
从右向左
第1位 星期一
第2位 星期二
3 星期三
4 星期四
5 星期五
6 星期六
7 星期七

eg.
111 111 1 (二进制) = 128 (十进制) 就是 星期 一,星期二 星期三,星期四,星期五,星期六,星期日

week字段存储的是一个smallint的数字值
(case week
"when 1 then '星期一' " & _
"when 2 then '星期二' " & _
"when 3 then '星期一,星期二' " & _
"when 4 then '星期三' " & _
"when 5 then '星期一,星期三' " & _
"when 6 then '星期二,星期三' " & _
"when 7 then '星期一,星期二,星期三' " & _
"when 8 then '星期四' " & _
"when 9 then '星期一,星期四' " & _
"when 10 then '星期二,星期四' " & _
"when 11 then '星期一,星期二,星期四' " & _
"when 12 then '星期三,星期四' " & _
"when 13 then '星期一,星期三,星期四' " & _
"when 14 then '星期二,星期三,星期四' " & _
"when 15 then '星期一,星期二,星期三,星期四' " & _
"when 16 then '星期五' " & _
"when 17 then '星期一,星期五' " & _
"when 18 then '星期二,星期五' " & _
"when 19 then '星期一,星期二,星期五' " & _
"when 20 then '星期三,星期五' " & _
"when 21 then '星期一,星期三,星期五' " & _
"when 22 then '星期二,星期三,星期五' " & _
"when 23 then '星期一,星期二,星期三,星期五' " & _
"when 24 then '星期四,星期五' " & _
"when 25 then '星期一,星期四,星期五' " & _
"when 26 then '星期二,星期四,星期五' " & _
......
end) as week
...全文
94 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2010-05-25
  • 打赏
  • 举报
回复
精简一下
SELECT GROUP_CONCAT(name) AS week
FROM
(
SELECT
1 AS w, 'Mon' AS name
UNION
SELECT
2 AS w, 'Tue' AS name
UNION
SELECT
4 AS w, 'Wed' AS name
UNION
SELECT
8 AS w, 'Thu' AS name
UNION
SELECT
16 AS w, 'Fri' AS name
UNION
SELECT
32 AS w, 'Sat' AS name
UNION
SELECT
64 AS w, 'Sun' AS name
) X
WHERE 127 & X.w != 0

shine333 2010-05-25
  • 打赏
  • 举报
回复
你记错了,128已经越界了,127才等于111 1111
shine333 2010-05-25
  • 打赏
  • 举报
回复
SELECT GROUP_CONCAT(name) AS week
FROM
(SELECT 127 AS num) A,
(
SELECT
1 AS w, 'Mon' AS name
UNION
SELECT
2 AS w, 'Tue' AS name
UNION
SELECT
4 AS w, 'Wed' AS name
UNION
SELECT
8 AS w, 'Thu' AS name
UNION
SELECT
16 AS w, 'Fri' AS name
UNION
SELECT
32 AS w, 'Sat' AS name
UNION
SELECT
64 AS w, 'Sun' AS name
) X
WHERE A.num & X.w != 0
GROUP BY num

可爱的小莱 2010-05-25
  • 打赏
  • 举报
回复
select MAKE_SET(week,'星期一','星期二','星期三','星期四','星期五','星期六','星期日') from student

可以了
谢谢 ACMAIN_CHM
shine333 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acmain_chm 的回复:]
SQL code
mysql> select MAKE_SET(1,'星期一','星期二','星期三','星期四','星期五','星期六','星期日');
+----------------------------------------------------------------------------+
| MAKE_SET(1,'星期一','星期二','星期三','星期四','星期……
[/Quote]
可爱的小莱 2010-05-25
  • 打赏
  • 举报
回复
我的查询语句 select id,week from zhxx
怎样 才能得到这样的对应关系的查询结果

实际字段值(smallint) | 显示结果
---------------------------------------------------------------
week | 星期
*******************************
1 星期一
2 星期二
4 星期三
12 星期三,星期四
16 星期五
7 星期一,星期二,星期三
96 星期一,星期二,星期三,星期六,星期日
127 星期一,星期二,星期三,星期四,星期五,星期六,星期日
127 星期一,星期二,星期三,星期四,星期五,星期六,星期日
---------------------------------------------------------------
?????
thunderbolt_0618 2010-05-25
  • 打赏
  • 举报
回复
楼主想查询什么啊???
ACMAIN_CHM 2010-05-25
  • 打赏
  • 举报
回复
mysql> select MAKE_SET(1,'星期一','星期二','星期三','星期四','星期五','星期六','星期日');
+----------------------------------------------------------------------------+
| MAKE_SET(1,'星期一','星期二','星期三','星期四','星期五','星期六','星期日') |
+----------------------------------------------------------------------------+
| 星期一 |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select MAKE_SET(2,'星期一','星期二','星期三','星期四','星期五','星期六','星期日');
+----------------------------------------------------------------------------+
| MAKE_SET(2,'星期一','星期二','星期三','星期四','星期五','星期六','星期日') |
+----------------------------------------------------------------------------+
| 星期二 |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select MAKE_SET(3,'星期一','星期二','星期三','星期四','星期五','星期六','星期日');
+----------------------------------------------------------------------------+
| MAKE_SET(3,'星期一','星期二','星期三','星期四','星期五','星期六','星期日') |
+----------------------------------------------------------------------------+
| 星期一,星期二 |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select MAKE_SET(127,'星期一','星期二','星期三','星期四','星期五','星期六','星期日');
+------------------------------------------------------------------------------+

| MAKE_SET(127,'星期一','星期二','星期三','星期四','星期五','星期六','星期日') |

+------------------------------------------------------------------------------+

| 星期一,星期二,星期三,星期四,星期五,星期六,星期日 |

+------------------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql>
ACMAIN_CHM 2010-05-25
  • 打赏
  • 举报
回复
111 111 1 (二进制) = 128 (十进制)
等吗?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧