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 6353 게시물 읽기
No. 6353
반각문자들로 구성된 데이터 사이에 전각문자가 존재할 경우 추출
작성자
김종문(bastard7)
작성일
2012-03-29 16:02
조회수
10,576

 

항상 도움만 받고 있음에 우선 감사드립니다. (꿉뻑~)

이번에 데이터 마이그레이션을 진행중입니다.

as-is는 MS-SQL 2000, to-be는 ORACLE10G입니다.

그런데 as-is의 데이터를 살펴보던 중, 데이터 사이에 전각문자(코드페이지 949)가 끼어 있는 데이터를 발견했습니다.

예) 5년이상10년미만  암                   

위의 예)에서 5, 1, 0이 전각문자입니다.

질문입니다.

위의 예처처럼 row들 중 중간에 전각문자(0~9)가 존재하는 row만 추출하는 방법을 알 수 있을까요?

고수님들의 많은 도움 부탁드립니다. 감사합니다. ^^

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

 unicode() 함수를 이용해서 나오는 값이 65296( 0xFF10 )~ 65305( 0xFF19 ) 인 경우 전각 0에서 9까지의 값이 됩니다.

 

 

SELECT NCHAR( 65296 ), UNICODE( NCHAR( 65296 ) )
, NCHAR( 65305 ), UNICODE( NCHAR( 65305 ) );
 
즉, 글자 하나씩 잘라서 UNICODE() 함수를 적용해서 65296 ~ 65305 사이의 값(전각문자 0~9)인지 아닌지 확인할 수 있겠습니다.
 
 
추가로 숫자외의 전각문자를 확인하고 싶으신 경우에는 http://unicode.org/charts/PDF/UFF00.pdf 를 참조하시면 전각 문자의 값(hex)을 확인하실 수 있습니다.
 
2000의 경우 text에 대해서 substring()을 직접 사용할 수 없는 관계로 문의하신 데이터가 제발 nvarchar(4000) 이기를 빌어봅니다. ㅋ
 
 

우욱님이 2012-03-29 17:22에 작성한 댓글입니다. Edit

전각을 반각으로 변환하는 함수입니다.

도움되는지 모르겠지만 필요하시면 사용하세요

/****************************************************************************************************************************
*        f_ToSingleByte
* 작성자 : 신정규
* 작성일 : 2009.10.28.
* 용도 : 전각(DBCS:2바이트 문자집합)을 반각 문자열로 변환
* 제약 :
* 인자 :  @Str VARCHAR(4000)
* 결과값 : VARCHAR(4000)
****************************************************************************************************************************/
CREATE FUNCTION dbo.f_ToSingleByte(@Str VARCHAR(4000))
--ALTER FUNCTION dbo.f_ToSingleByte(@Str VARCHAR(4000))
RETURNS VARCHAR(4000)
BEGIN
 DECLARE @i INT,
   @vTmp NVARCHAR,
   @vRet  NVARCHAR(4000)

 SET @vRet = ''
 SET @vTmp = ''
 SET @i  = 1

 WHILE @i<=LEN(@Str)
 BEGIN
  IF UNICODE(SUBSTRING(@Str, @i, 1))=12288
   SET @vTmp = ' '
  ELSE
   SET @vTmp = ISNULL(NCHAR(UNICODE(SUBSTRING(@Str, @i, 1)) - 65248), SUBSTRING(@Str, @i, 1)) 

  SET @i  = @i + 1
  SET @vRet = @vRet+@vTmp
 END 
  
 RETURN @vRet

/*
SELECT dbo.f_ToSingleByte('DSL601 FALLETFORK')
SELECT dbo.f_ToSingleByte('서울 노원구 중계동 건영2차103-1104호 ')
*/
END

 

신정규님이 2012-04-03 18:03에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6356or 연산을 지원하는 집계함수가 필요합니다. [3]
조중규
2012-04-04
9326
6355쿼리문을 짜야되는데요 좋은 방법있는지 부탁드려요 [3]
난해해
2012-04-03
7897
6354sql2008에서 이미지 화일 db에 저장하는 방법 sql문부탁
김길동
2012-04-01
7032
6353반각문자들로 구성된 데이터 사이에 전각문자가 존재할 경우 추출 [2]
김종문
2012-03-29
10576
6351일자별 누계 어떻게 해야 하나요? [7]
이중희
2012-03-27
9360
6350ldf 파일용량 관련질문입니다. [1]
고영민
2012-03-23
7871
6348mssql2005에서 DB생성 문제(다른사람 DB가 보임) [1]
권혁진
2012-03-21
7551
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다