포럼 에서 발생 하 는 비교적 어 려 운 sql 문제: 18 (문자 통합 정수 해석 요일)

최근 포럼 에서 어 려 운 sql 문 제 를 많이 만 났 습 니 다. 자신 도 해결 할 수 있 지만 며칠 지나 면 기억 이 나 지 않 고 해결 방법 도 잊 어 버 렸 습 니 다.
그래서 기록 할 필요 가 있다 고 생각 합 니 다. 그러면 나중에 이런 문제 에 다시 부 딪 히 면 그 중에서 해답 의 방향 을 얻 을 수 있 습 니 다.
요일 
1 = 일요일 2 = 월요일 4 = 화요일 8 = 수요일 16 = 목요일 32 = 금요일 64 = 토요일,
일요일  월요일  화요일  수요일  0010000 = 목요일  금요일  1000000 = 토요일 을 유추 해 보면 011111 은 일요일 ~ 금요일 011111 이 10 진법 63 으로 바 뀌 었 다.
사실 이 숫자 는 무슨 요일 을 대표 하 는 지 C 언어 에 서 는 매 거 진 유형 이다.
다음은 나의 방법 이다.
declare @i int
declare @v nvarchar(100)

set @i = 63  --      
set @v = ''

SELECT @v = @v+  CASE WHEN @i & v1 <> 0 then ','+v2 else '' end 
FROM
(
SELECT 1 v1,'   ' v2 union all
SELECT 2,'   '  union all
SELECT 4,'   ' union all 
SELECT 8,'   ' union all 
SELECT 16,'   ' union all 
SELECT 32,'   ' union all 
SELECT 64,'   ' 
)t


select stuff(@v,1,1,'')
/*
   ,   ,   ,   ,   ,   
*/


set @i= 3

SELECT @v = @v+  CASE WHEN @i & v1 <> 0 then ','+v2 else '' end 
FROM
(
SELECT 1 v1,'   ' v2 union all
SELECT 2,'   '  union all
SELECT 4,'   ' union all 
SELECT 8,'   ' union all 
SELECT 16,'   ' union all 
SELECT 32,'   ' union all 
SELECT 64,'   ' 
)t

select stuff(@v,1,1,'')
/*
   ,   
*/

좋은 웹페이지 즐겨찾기