본문 바로가기
IT-개발,DB

[개발/DB] MDB 도움말 (5) - 문자열 비교에 와일드카드 문자 사용

by SB리치퍼슨 2012. 11. 26.

[개발/DB] MDB 도움말 (5) - 문자열 비교에 와일드카드 문자 사용


문자열 비교에 와일드카드 문자 사용

내장 패턴 일치 기능은 문자열을 비교할 때 유용하게 사용할 수 있습니다. 다음은 Like 연산자와 함께 사용할 수 있는 와일드카드 문자 및 상응하는 숫자 또는 문자열을 나타낸 테이블입니다.


pattern의 문자 expression의 상응 대상 

? or _ (밑줄) 한 문자 

* or % 0이나 여러 개 문자 

# 한자리 숫자(0 — 9) 

[charlist] charlist에 있는 한 문자 

[!charlist] charlist에 없는 한 문자 



여러 문자 그룹(charlist)을 대괄호([ ])로 묶어 expression에 있는 일치하는 단일 문자를 찾을 수 있으며, charlist는 십진수를 포함한 ANSI 문자 집합에 있는 거의 모든 문자를 포함할 수 있습니다. 실제로 특수 문자인 왼쪽 대괄호([ ), 물음표(?), 숫자 기호(#) 및 별표 (*) 등을 찾을 때는 대괄호로 묶어야 합니다. 오른쪽 대괄호( ])를 찾기 위해 그룹 안에 오른쪽 대괄호( ])를 사용할 수는 없으나 그룹 밖에서는 개별 문자로 사용할 수 있습니다.


대괄호로 묶은 간단한 문자 목록 외에 charlist는 상/하한 영역을 지정하기 위해 하이픈(-)을 사용할 수 있습니다. 예를 들면, pattern에 [A-Z]를 사용하면 식에서 A부터 Z 사이의 대문자가 있는 문자를 모두 찾습니다. 여러 범위를 지정할 때 구분 기호를 사용하지 않아도 됩니다. 예를 들면, [a-zA-Z0-9]는 모든 문자 숫자를 찾습니다.


ANSI SQL 와일드카드 (%)와 (_)는 Microsoft버전 4.X와 Microsoft OLE DB Provider for Jet와만 사용할 수 있다는 점에 주의하십시오. ANSI SQL 와일드카드 (%)와 (_)는 Microsoft Access나 DAO에서는 문자로 인식됩니다.




Microsoft Jet SQL과 ANSI SQL 비교

Microsoft Jet 데이터베이스 엔진 SQL은 보통 ANSI-89 레벨 1까지 지원되지만 일부 ANSI SQL 기능은 Microsoft에서 실행되지 않습니다. Microsoft Jet 버전 4.X 릴리스를 사용하면 Microsoft OLE DB Provider for Jet에서 더 많은 ANSI-92 SQL 구문을 볼 수 있습니다. 이와 반대로 Microsoft Jet SQL에는 ANSI SQL에서 지원되지 않는 기능과 예약어가 있습니다.


주요 차이점

Microsoft Jet SQL과 ANSI SQL은 각각 서로 다른 예약어와 데이터 형식을 지원하고 있습니다. 자세한 내용은 Microsoft Jet 데이터베이스 엔진 SQL 예약어와 해당 ANSI SQL 데이터 형식을 참고하십시오. Jet 4.X와 함께 Microsoft OLE DB Provider for Jet를 사용하면 추가적인 예약어가 있습니다. 

Between...And 구조에 적용하는 규칙이 다릅니다. 구문은 다음과 같습니다. 

expr1 [NOT] Between value1 And value2 


Microsoft Jet SQL에서는 value1이 value2보다 클 수 있지만 ANSI SQL에서는 value1이 value2보다 작거나 같아야 합니다. 


Microsoft Jet SQL은 Like 연산자와 함께 사용하도록 ANSI SQL 와일드카드 문자와 Microsoft Jet 특정 와일드카드 문자를 둘 다 지원합니다. 그러나 ANSI와 Microsoft Jet 와일드카드 문자는 상호 배타적입니다. 둘 중 하나만 사용해야 하며 함께 사용할 수 없습니다. Jet 4.X와 Microsoft OLE DB Provider for Jet를 사용할 때만 ANSI SQL 와일드카드를 사용할 수 있습니다. Microsoft Access나 DAO를 통해 ANSI SQL 와일드 카드를 사용하려고 할 경우, ANSI SQL 와일드 카드는 문자로 해석됩니다. Microsoft OLE DB Provider for Jet와 Jet 4.X를 사용할 때는 이와 반대입니다.



해당 문자                  Microsoft Jet SQL                      ANSI SQL 

--------------------------------------------------------------------

한 문자                      ?                                             _(밑줄) 

0이나 여러 개 문자      *                                              %

  [참고]MDB 도움말 (4) - ODBC 스칼라 함수

ODBC 스칼라 함수

Microsoft은 스칼라 함수 구문으로 정의된 ODBC의 사용을 지원합니다. 예를 들어, 쿼리는 


SELECT DAILYCLOSE, DAILYCHANGE FROM DAILYQUOTE

WHERE {fn ABS(DAILYCHANGE)} > 5


주식 변동 가격이 절대값 5보다 크면 모든 줄을 반환합니다.


스칼라 함수로 정의된 ODBC의 부분 집합이 지원됩니다. 다음 테이블은 지원되는 함수들을 나열한 것입니다.


인수 설명과 SQL 문에서 함수를 포함하기 위해 구문이 나오는 복잡한 설명은 ODBC 설명서를 참고하십시오. 


문자열 함수

ASCII LENGTH RTRIM 

CHAR LOCATE SPACE 

CONCAT LTRIM SUBSTRING 

LCASE RIGHT  UCASE 

LEFT     



숫자 함수

ABS FLOOR SIN 

ATAN LOG SQRT 

CEILING POWER TAN 

COS RAND MOD 

EXP SIGN   



시간과 날짜 함수

CURDATE DAYOFYEAR MONTH 

CURTIME YEAR WEEK 

NOW HOUR QUARTER 

DAYOFMONTH MINUTE MONTHNAME 

DAYOFWEEK SECOND DAYNAME 



데이터 형식 변환

CONVERT 문자열은 다음 데이터 형식으로 변환될 수 있습니다. SQL_FLOAT, SQL_DOUBLE, SQL_NUMERIC, SQL_INTEGER, SQL_REAL, SQL_SMALLINT, SQL_VARCHAR and SQL_DATETIME. 

MDB 도움말 (3) - 각종함수

Choose문의 사용예


    SELECT Format(now,"aaaa"), Choose(Cint(Format(now,"w")), "일", "월", "화", "수", "목", "금", "토");



Switch문의 사용예

    

    SELECT Switch(  Cint(Format(now,"w")) = 1 ,  "일",  

                    Cint(Format(now,"w")) = 2 ,  "월",  

                    Cint(Format(now,"w")) = 3 ,  "화",  

                    Cint(Format(now,"w")) = 4 ,  "수",  

                    Cint(Format(now,"w")) = 5 ,  "목",  

                    Cint(Format(now,"w")) = 6 ,  "금",  

                    Cint(Format(now,"w")) = 7 ,  "토"

                 )

                 

IIF문의 사용예                 

                 

        SELECT iif( Cint(Format(now,"w")) <= 4 ,  "수요일이전",  "수요일이후")

        

        SELECT iif( Cint(Format(now,"w")) = 1 ,  "일요일", 

                     iif( Cint(Format(now,"w")) = 2 ,  "월요일",

                     iif( Cint(Format(now,"w")) = 3 ,  "화요일",

                     iif( Cint(Format(now,"w")) = 4 ,  "수요일",

                     iif( Cint(Format(now,"w")) = 5 ,  "목요일",

                     iif( Cint(Format(now,"w")) = 6 ,  "금요일",  "토요일" ))))))

        

        

Mid(string, start[, length])     

        

        SELECT Mid("월요일", 1, 1)  Result : 월

        


Left(string, length), Right(string, length)


        SELECT Left("월요일", 1)  Result : 월

        SELECT Right("월요일", 1)  Result : 일

        



Len(string | varname)


        SELECT Len("월요일")  Result : 3

        


LTrim(string), RTrim(string), Trim(string)


        SELECT LTrim(" 월요일 ")  Result : "월요일 "

        SELECT RTrim(" 월요일 ")  Result : " 월요일"

        SELECT Trim(" 월요일 ")   Result : "월요일"



InStr ([start, ]string1, string2[, compare])


        SELECT Instr("1234567891234","1")     Result : 1

        


InstrRev(stringcheck, stringmatch[, start[, compare]])


        SELECT InstrRev("1234567891234","1")  Result : 10



StrComp(string1, string2[, compare])


        설정

        ====

        compare 인수 설정은 아래와 같습니다.

        

        상수 값 설명 

        ============

        vbUseCompareOption -1 Option Compare 문 설정을 사용하여 비교합니다. 

        vbBinaryCompare 0 이진 비교를 수행합니다. 

        vbTextCompare 1 텍스트를 비교합니다. 

        vbDatabaseCompare 2 Microsoft Access 전용. 데이터베이스의 정보를 기반으로 비교를 수행합니다. 

        

        

        

        반환값

        ======

        StrComp 함수는 아래와 같은 반환값으로 되어 있습니다.

        

        다음 경우 StrComp 반환값 

        string1이 string2보다 적은 경우 -1 

        string1이 string2와   같은 경우  0 

        string1이 string2보다   큰 경우  1 

        string1 또는 string2가 Null인 경우 Null 

        

        

        SELECT StrComp('월요일', '화요일', 2);  Result : -1

        

        SELECT StrComp('월요일', '월요일', 2);  Result : 0

        

        SELECT StrComp('화요일', '월요일', 2);  Result : 1


Replace(expression, find, replace[, start[, count[, compare]]])


        구성 요소 설명 

        =============

        expression 필수적인 요소. 대체할 부분 문자열을 포함하는 문자식. 

        find 필수적인 요소. 찾을 부분 문자열 

        replace 필수적인 요소. 대체될 부분 문자열 

        start 선택적인 요소. 부분 문자열 검색이 시작될 expression 내의 위치. 생략하면 1이 사용됩니다. 

        count 선택적인 요소. 수행할 부분 문자열 대체 횟수. 생략하면 기본값은 ?1입니다. 이것은 가능한 모든 대체 사항이 대체됨을 의미합니다. 

        compare 선택적인 요소. 부분 문자열을 평가할 때 사용할 비교의 종류를 나타내는 숫자 값. 값에 대한 설명은 아래 설정을 참조하십시오. 

        

        

        

        설정

        ====

        compare 인수의 값은 아래와 같습니다.

        

        상수 값 설명 

        vbUseCompareOption ?1 Option Compare문의 설정을 사용하여 비교를 수행합니다. 

        vbBinaryCompare 0 이진 비교를 수행합니다. 

        vbTextCompare 1 텍스트 비교를 수행합니다. 

        vbDatabaseCompare 2 Microsoft Access 전용. 데이터베이스의 정보를 기반으로 비교를 수행합니다. 

        

        

        

        반환값

        ======

        Replace는 아래 값을 반환합니다.

        

        다음의 경우 Replace가 반환하는 값 

        expression의 길이가 0일 경우 길이가 0인 문자열("") 

        expression이Null일 경우 오류 

        find의 길이가 0일 경우 expression의 사본 

        replace의 길이가 0일 경우 find의 모든 발생이 제거된 expression의 사본 

        start > Len(expression) 길이가 0인 문자열 

        count가 0일 경우 expression의 사본 


        SELECT replace("오늘은 월요일 입니다. 하지만 월요일을 수요일로 바꿔야 합니다.", "월", "화", 1, 1, 2)              




기타....


Avg 함수

Count 함수

First, Last 함수 - 쿼리를 실행하여 나온 결과 집합에서 처음 또는 마지막 레코드의 필드값을 반환합니다.


Min, Max 함수

StDev, StDevP 함수 - 쿼리의 특정 필드에 포함된 값으로 모집단이나 모집단 표본에 대한 표준 편차의 결과를 반환합니다.


Sum 함수

Var, VarP 함수 - 쿼리의 지정 필드에 포함된 일련의 값으로 모집단이나 모집단 표본에 대한 분산 결과를 반환합니다

 [참고]MDB 도움말 (2) - 형식 변환 함수

형식 변환 함수


      

아래의 각 함수는 식을 특정한 데이터 형식으로 변환합니다.


구문


CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CVar(expression)

CStr(expression)


필수 요소인 expression인수는 모든 문자식이나 수식을 사용할 수 있습니다.


반환값


함수 이름에 따른 반환값의 형식은 아래와 같습니다


함수            반환 형식           expression 인수의 범위             

======================================================================

CBool           Boolean         유효한 문자식이나 수식             


CByte           Byte            0 - 255            


CCur            Currency        -922,337,203,685,477.5808 - 922,337,203,685,477.5807               


CDate           Date            유효한 모든 날짜식             


CDbl            Double          음수값인 경우: -1.79769313486232E308 - -4.94065645841247E-324. 


                                양수값인 경우: 4.94065645841247E-324 - 1.79769313486232E308            


CDec            Decimal         소수점 이하 단위가 없는 경우: +/-79,228,162,514,264,337,593,543,950,335 


                                소수점 이하 28자릿수의 값으로서 


                                그 범위는 +/-7.9228162514264337593543950335. 


                                가장 작은 표현 가능한 숫자는 0.0000000000000000000000000001            


CInt            Integer         -32,768 - 32,767. 나머지는 반올림              


CLng            Long            -2,147,483,648 - 2,147,483,647. 나머지는 반올림            


CSng            Single          음수값인 경우: -3.402823E38 - -1.401298E-45. 


                                양수값인 경우: 1.401298E-45 - 3.402823E38              


CStr            String          CStr에 대한 반환은 expression 인수에 따라 달라집니다.              


Cvar            Variant         숫자인 경우: Double과 같은 범위. 


                                숫자가 아닌 경우: String과 같은 범위             




참고


함수에 전달된 expression이 변환되는 데이터 형식 범위 밖에 있으면 오류가 발생합니다.


일반적으로 계산의 결과값을 기본 자료형이 아닌 특정 자료형으로 표현하려는 경우 데이터 형식 변환 함수를 사용합니다.


예를 들면 단정도나 배정도 또는 정수 계산 대신 통화 계산을 하려면 CCur 함수를 사용합니다.


국제적으로 인식되는 데이터 형식 변환을 위해서는 Val 함수보다는 데이터 형식 변환을 사용해야 합니다. 


예를 들면 CCur 함수를 사용하면 소수 구분 기호, 천 단위 구분 기호와 다양한 통화 옵션이 


사용자 컴퓨터의 로케일 환경 설정 내용에 따라 적절하게 인식됩니다.


소수점 이하 부분이 정확히 0.5일 때, CInt과 CLng 함수는 항상 가장 가까운 짝수로 반올림한 후 처리합니다. 


예를 들면 0.5는 0으로 반올림하고, 1.5는 2로 반올림합니다. 반면 Fix와 Int 함수는 CInt와 CLng 함수와 달리 


소수점 이하 부분을 반올림하지 않고 버립니다. 또한 Fix와 Int 함수는 전달된 값과 같은 데이터 형식의 값만 반환합니다.


IsDate 함수는 date를 날짜나 시간으로 변환할 수 있는지 검사할 때 사용합니다. 


CDate 함수는 허용 가능한 날짜 범위 안의 숫자 뿐만 아니라 날짜 리터럴과 시간 리터럴을 인식합니다.


숫자를 날짜로 변환할 때는 숫자 전체가 날짜로 바뀌며 숫자 중 소수점 부분은 자정을 시작점으로 하여 시간 단위로 변환합니다.


CDate 함수는 사용자의 컴퓨터 로케일 환경 설정 내용에 맞게 날짜 형식을 인식합니다. 


연, 월, 일이 인식 가능한 날짜 설정 중 하나가 아닌 형식으로 주어지는 경우 


해당되는 날짜 형식의 올바른 순서를 결정할 수 없습니다. 


자세하게 표시 날짜 형식은 주중 요일 문자열을 포함하는 경우 인식할 수 없습니다.


CVDate 함수는 이전 Visual Basic 버전과의 호환성을 위하여 사용할 수 있습니다. 


CVDate 함수의 구문은 CDate 함수와 동일하지만 


CVDate 함수는 실제 Date 형식 대신 하위 형식이 Date인 Variant 값을 반환하는 점이 다릅니다. 


현재는 고유한 Date 형식이 있으므로 CVDate 함수를 더 이상 사용하지 않습니다. 


식의 값을 Date 형식으로 변환하고 이 변환된 값을 Variant 형식에 할당할 경우 결과값은 같습니다. 


이러한 방법으로 다른 모든 고유한 데이터 형식을 동일한 형식의 Variant 하위 형식으로 변환할 수 있습니다.


메모   CDec 함수는 별도의 데이터 형식을 반환하지 않고 Decimal 하위 형식으로 변환된 Variant 형식의 데이터를 반환합니다.

[참고]MDB 도움말 (1) - 사용자 정의 날짜/시간 형식(Format 함수)

사용자 정의 날짜/시간 형식(Format 함수)


      

사용자 정의 날짜/시간 형식을 만드는 데 사용할 수 있는 문자들이 아래 표에 나열되어 있습니다.


문자                설명

================================================================================================                   

(:)             시간 구분 기호. 로케일에 따라 다른 문자를 시간 구분 기호로 사용할 수 있습니다. 

                시간 값이 형식화될 때 시간 구분 기호는 시, 분, 초를 나눕니다. 

                형식화된 출력에서 시간 구분 기호로 사용되는 실제 문자는 

                사용자의 시스템 설정에 따라 결정됩니다.                


(/)             날짜 구분 기호. 로케일에 따라 다른 문자를 날짜 구분 기호로 사용할 수 있습니다.

                날짜값이 형식화될 때 날짜 구분 기호는 일, 월, 연도를 나눕니다. 

                형식화된 출력에서 날짜 구분 기호로 사용되는 실제 문자는 

                사용자의 시스템 설정에 따라 결정됩니다.                


c               날짜는 ddddd로, 시간은 ttttt로 표시하고, 이 순서대로 표시합니다. 

                날짜 일련 번호에 소수점 이하 부분이 없으면 날짜 정보만 표시하고 

                정수 부분이 없으면 시간 정보만 표시합니다.                 


d               앞에 0을 붙이지 않고 1을 표시합니다(예: 1-31).                 


dd              앞에 0을 붙여 1을 표시합니다(예: 01-31).                   


ddd             요일을 약어로 표시합니다(예: Sun -Sat).                


dddd            요일을 원래대로 표시합니다(예:Sunday-Saturday).                


ddddd           날짜를 사용자 시스템의 간단하게 표시 날짜 형식 설정에 따라 

                형식화된 완전한 형태의 날짜로 표시(년, 월, 일 포함)합니다. 

                간단하게 표시 날짜 형식은 기본적으로 년-월-일(yy-mm-dd) 형태로 표시합니다.                 


dddddd          날짜를 사용자 시스템에서 인식하는 자세하게 표시 날짜 형식 설정대로 형식화된 

                완전한 날짜로 표시(년, 월, 일 포함)합니다. 

                자세하게 표시 날짜 형식의 기본 형식은 년, 월 일, 요일입니다(예: yyyy년 m월 d일 dddd).                  


aaaa            dddd와 같지만 문자열의 지역화된 버전입니다.                    


w               한 주를 기준으로 일을 숫자로 표시합니다. 일요일을 1로, 

                토요일을 7로 표시하여 일요일부터 토요일까지 표시합니다.                


ww              한 해를 기준으로 주를 표시합니다(예: 1-54).                


m               앞에 0을 붙이지 않고 월을 숫자로 표시합니다(예: 1-12). 

                m이 h 또는 hh 바로 뒤에 오면 월이 아니라 분을 표시합니다.                  


mm              앞에 0을 붙여 월을 숫자로 표시합니다(예: 01-12). 

                m이 h 또는 hh 바로 뒤에 오면 월이 아니라 분을 표시합니다.                  


mmm             월을 약어로 표시합니다(예: Jan  Dec).                  


mmmm            월 명칭을 원래대로 표시합니다(예: January - December).                 


oooo            mmmm과 같지만 문자열의 지역화된 버전입니다.                


q               연도의 분기를 숫자로 표시합니다(예: 1 - 4).                


y               한 해를 기준으로 날짜를 표시합니다(예: 1 - 366).                   


yy              연도를 2자릿수로 표시합니다(예: 00 - 99).                  


yyyy            연도를 4자릿수로 표시합니다(예: 100 - 9999).                   


h               앞에 0을 붙이지 않고 시간을 숫자로 표시합니다(예: 0 - 23).                 


Hh              앞에 0을 붙여 시간을 숫자로 표시합니다(예: 00 - 23).                   


N               앞에 0을 붙이지 않고 분을 숫자로 표시합니다(예: 0 - 59).                   


Nn              앞에 0을 붙여 분을 숫자로 표시합니다(예: 00 - 59).                 


S               앞에 0을 붙이지 않고 초를 숫자로 표시합니다(예: 0 - 59).                   


Ss              앞에 0을 붙여 초를 숫자로 표시합니다(예: 00 - 59).                 


t t t t t       시간을 사용자 시스템에서 인식하는 시간 형식으로 정의된 

                시간 구분 기호를 사용해서 형식화된 완전한 형태의 

                시간(시, 분, 초 포함)으로 표시합니다. 

                결과값이 0:00부터 10:00사이(오전/오후)이고 소수점 앞 0 옵션이 선택되어 있으면 

                1시부터 9시 사이의 시간 값 앞에 0이 붙습니다. 기본 시간 형식은 h:mm:ss입니다.                  


AM/PM           12시간 시계 사용. 오전 시간이면 AM(오전)이 시간과 함께 표시되고 

                오후 시간이면 PM(오후)이 시간과 함께 표시됩니다.                   


am/pm           12시간 시계 사용. 오전 시간이면 am(오전)이 시간과 함께 표시되고 

                오후 시간이면 pm(오후)이 시간과 함께 표시됩니다.                   


A/P             12시간 시계 사용. 오전 시간이면 A(오전)가 시간과 함께 표시되고 

                오후 시간이면 P(오후)가 시간과 함께 표시됩니다.                


a/p             12시간 시계 사용. 오전 시간이면 a(오전)가 시간과 함께 표시되고 

                오후 시간이면 p(오후)가 시간과 함께 표시됩니다.                


AMPM            12시간 시계를 사용. 사용자 시스템에서 정의된 대로 오전 문자열 리터럴을 

                오전 시간인 경우 표시. 시간이 오후인 경우 오후 문자열을 사용자 시스템에서 

                정의된 대로 표시. 오전 오후는 대/소문자 구분이 없으나 표시되는 문자열은 

                사용자 시스템 설정과 일치하게 나타납니다. 기본 형식은 오전/오후입니다.               






 

SELECT format(now,'yyyymmdd') -> '20041105' 

SELECT format(now,'yyyymmdd ww') -> '20041105 45' 

날짜를 기준으로 분기별 월별 요일별 통계자료등을 뽑을때 쓰면 유용하겠네요..^^ 


그리고 좀더 복잡한 날짜 계산이 필요하다면 mdb내의 모듈을 이용해서 함수를 직접 만들어 사용할수도 있습니다..^^;

[출처] [참고]MDB 도움말 (5) - 문자열 비교에 와일드카드 문자 사용 |작성자 디스턴스

반응형

댓글