본문 바로가기
Database/MYSQL

Mysql 32 BIT 기록된 Integer 값 변환하여 알아오기

by 반화넬 2011. 12. 7.
반응형

MSSQL에서는 쉽게 bigint 값을 바이너리 변환하여 해당 비트값을 알아오기 쉬웠던것 같은데. ㅋ

 

그래도 Mysql에서 역시 해당 함수를 이용해서 가볍게 알아 올수 있어서 참 다행입니다.

 

1. 32비트의 값중에서 해당 비트 만큼 사용할경우.

4비트 + 8비트 + 4비트 + 4비트 + 4비트 + 8비트

(해당값) 1,4,1,1,1,1

2. 32비트 값을 integer 로 변한된 값 : 272699649

 

3. 일반 쿼리로 변환하여 해당 값알아오기
SELECT ((272699649) & POW(2,32)-POW(2,28)) >> 28 ;
SELECT ((272699649) & POW(2,28)-POW(2,20)) >> 20 ;
SELECT ((272699649) & POW(2,20)-POW(2,16)) >> 16 ;
SELECT ((272699649) & POW(2,16)-POW(2,12)) >> 12 ;
SELECT ((272699649) & POW(2,12)-POW(2,8)) >> 8 ;
SELECT ((272699649) & POW(2,8)-POW(2,0)) >> 0 ;

 

4. 함수를 생성하여 해당 함수를 이용하여 값을 동적으로 알아오기
SELECT f_wBitOneMust_run(272699649,32,28);
SELECT f_wBitOneMust_run(272699649,28,20);
SELECT f_wBitOneMust_run(272699649,20,16);


DELIMITER $$

USE `DB_NAME`$$

DROP FUNCTION IF EXISTS `f_bitConvertPow`$$

CREATE FUNCTION `f_bitConvertPow`(
bitVal BIGINT,bitCnt1 INT,bitCnt2 INT
) RETURNS VARCHAR(100) CHARSET euckr
    READS SQL DATA
    COMMENT '비트값중 해당 자리에  값 추출'
BEGIN
 DECLARE s_return VARCHAR(100) DEFAULT '';
 IF bitVal>0 THEN
  SET s_return = ((bitVal) & POW(2,bitCnt1)-POW(2,bitCnt2)) >> bitCnt2 ;
 END IF;
 
 RETURN s_return;
  

END$$

DELIMITER ;

반응형