database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 861 게시물 읽기
No. 861
[질문] ip char(20) 형태의 column을 sorting 하고싶습니다.
작성자
노상국(bit4man)
작성일
2003-06-23 13:31
조회수
5,083

제목 그대로 char 형태의 아이피를

sorting하고싶은데 어떻게 sql문을 작성

해야 할지요 일반 텍스트로 정렬을 하면 끝자리

a.b.c.2번 이 a.b.c.10번 서버보다 뒤에 오게 되서요.........

이 글에 대한 댓글이 총 1건 있습니다.

그냥 쿼리를 하기는 복잡하고, 힘들것 같습니다..

아래의 사용자 함수를 이용하시면 될 것 같습니다.

그리고 아래의 사용자 함수는 http://sqler.pe.kr에

올라와 있는 split 사용자 함수를 수정한 것 입니다..

 

drop function dbo.fn_sortStr

go

 

CREATE FUNCTION dbo.fn_sortStr(@sText varchar(8000),@fill_num int, @sDelim varchar(20) ='#')

RETURNS varchar(8000)

AS

BEGIN

DECLARE @idx smallint,

@value varchar(8000),

@bcontinue bit,

@iStrike smallint,

@iDelimlength tinyint

,@retVal varchar(8000)

 

 

SET @idx = 1

SET @sText = LTrim(RTrim(@sText))

SET @iDelimlength = LEN(@sDelim)

SET @bcontinue = 1

set @retVal = ''

 

WHILE @bcontinue = 1

BEGIN

 

--텍스트에서 구분자를 발견하면, 첫 번째 요소를 반환하고

--반환되는 테이블에 인덱스를 입력한다.

IF CHARINDEX(@sDelim, @sText)>0

BEGIN

-- 첫 번째 요소를 반환

SET @value = SUBSTRING(@sText,1, CHARINDEX(@sDelim,@sText)-1)

 

-- 마지막 값도 구분자로 나누어져 있으뎐

SET @retVal = @retVal+ right( REPLICATE('0',@fill_num)+ @value ,@fill_num)

 

 

--다음 요소와 구분자를 문자열의 앞에서부터 제거하고,

--index를 증가시키고 반복작업(loop)을 이어간다.

SET @iStrike = LEN(@value) + @iDelimlength

SET @idx = @idx + 1

SET @sText = LTrim(Right(@sText,LEN(@sText) - @iStrike))

END

ELSE

BEGIN

--만약 텍스트 안에서 구분자를 더 이상 찾을 수 없게 되면,

--@sText가 @retArray의 마지막 값이다.

SET @value = @sText

-- 마지막 값도 구분자로 나누어져 있으뎐

 

-- 문자열 정렬를 위해 자리수를 마춤

SET @retVal = @retVal+ right( REPLICATE('0',@fill_num)+ @value ,@fill_num)

--WHILE 루프를 빠져 나온다.

SET @bcontinue = 0

END

END

RETURN @retVal

END

 

Go

 

 

* 사용 예제

 

 

create table ip

(

ip varchar(40) primary key

)

go

 

insert into ip(ip) values('201.10.5.6')

insert into ip(ip) values('31.10.5.50')

insert into ip(ip) values('100.10.10.10')

 

go

select dbo.fn_sortStr(ip,3,'.') ,*

from ip

order by dbo.fn_sortStr(ip,3,'.') desc

가을남자님이 2003-06-27 10:23에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
864[질문] sql2k 에서 특정테이블 복원..? [1]
나구네
2003-06-27
3974
863MSDE 설치에 관하여
궁금이
2003-06-25
3937
862MS SQL이 2000 프로에 설치가 아예 안되는것인가여? [2]
최원용
2003-06-23
3762
861[질문] ip char(20) 형태의 column을 sorting 하고싶습니다. [1]
노상국
2003-06-23
5083
860[질문] 실행계획을 분석법을 알고 싶습니다.
쥬니
2003-06-22
3929
859myslq의 유닉스타임을 ms-sql의 날짜형식으로..
초보자
2003-06-20
4577
853똑같은 쿼리문인데도 삭제가 안되는 이유는? [1]
이희재
2003-06-17
3743
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다