Language
한국어

[MSSQL] db정보, 차집합, 문자 타입 변환

2011.04.14 18:03

박영식 조회 수:5216

0. DB NAME 알아내기
select * from master..sysdatabases;
모든 DATABASES의 NAME을 볼 수 있다.

select * from sysaltfiles;
C:Program FilesMicrosoft SQL ServerMSSQLdata 에 존재하는 파일 리스트를 확인해 존재하는 DB를 알 수 있다.


1. n번째 레코드 값 알아내기
select top 2 * from web..board where strNumber>2 order by strNumber asc;
primary key를 비교해 특정 번호보다 큰 값으로 출력하게 하여 다음 레코드를 구한다.

차집합을 이용한 쿼리
select top 1 * from web..board C WHERE Not Exists (select strNumber from web..board where strNumber<=C.strNumber-5) order by strNumber desc;



2. 레코드 비교시 'A'=(select 'A')가 아닌 A의 아스키 코드로 비교하려면??
0x41=(select ????)
1) 16진수를 10진수로 변환
select cast(0x41 as int) ;

2) 16진수/10진수를 문자열로 변환
select char(0x41) ;
select char(65) ;

3) 문자열을 ascii로 변환
select ascii('A');

4) 정수를 16진수로 변환
select master.dbo.fn_varbintohexstr(65);

cf) 이 때, 자리수가 8자리(1byte)가 되므로, 비교할 때는 3. 2)와 같이 활용한다.

select top 1 ascii(substring(strName,1,1)) from web..board C WHERE Not Exists (select strNumber from web..board where strNumber<=C.strNumber-1) order by strNumber desc;

3. 한글은 변환

convert를 활용해야 한다.
select convert(binary(10), '나');
select cast(convert(varbinary(8), '가') as bigint)--decimal은 overflow가 일어나기 때문에 bigint를 사용한다.
select cast(cast(convert(varbinary, '갇') as int) as decimal)

unicode도 가능하다
select unicode('너');
select nchar(45320);