Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.4.0 |  CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 

특수 문자 이스케이프

설명

CUBRID는 특수 문자를 이스케이프(escape)하는 방법을 두 가지 지원한다. 하나는 따옴표를 이용한 방법이고, 다른 하나는 백슬래시(\)를 이용한 방법이다.

따옴표를 이용한 이스케이프

cubrid.conf의 시스템 파라미터 ansi_quotes가 no로 설정되어 있으면 문자열을 감쌀 때 큰따옴표(")와 작은따옴표(\') 둘 다 사용할 수 있다. ansi_quotes 파라미터의 기본값은 yes로, 문자열을 감쌀 때 작은따옴표만 사용할 수 있다. 아래 설명에서 2와 3은 ansi_quotes 값이 no일 때에만 적용된다.

  1. 작은따옴표로 감싼 문자열에 포함된 작은따옴표는 두 개의 작은따옴표(\'\')를 쓴다.
  2. 큰따옴표로 감싼 문자열에 포함된 큰따옴표는 두 개의 큰따옴표("")를 쓴다.
  3. 큰따옴표로 감싼 문자열에 포함된 작은따옴표는 이스케이프하지 않아도 된다.
  4. 작은따옴표로 감싼 문자열에 포함된 큰따옴표는 이스케이프하지 않아도 된다.
백슬래시를 이용한 이스케이프

백슬래시(\)를 이용한 이스케이프는 cubrid.conf의 시스템 파라미터 no_backslash_escapes를 no로 설정했을 때에만 사용할 수 있다. no_backslash_escapes 파라미터의 기본값은 yes이다. 입력값에 따라 다음과 같은 특수 문자를 의미한다.

  • \\' : 작은따옴표(\')
  • \" : 큰따옴표(")
  • \n : 뉴라인(newline, linefeed) 문자
  • \r : 캐리지 리턴(carrage return) 문자
  • \t : 탭(tab) 문자
  • \\ : 백슬래시(backslash)
  • \% : 퍼센트 기호(%). 자세한 내용은 아래 설명을 참고한다.
  • \_ : 언더바(_). 자세한 내용은 아래 설명을 참고한다.

다른 모든 이스케이프에 대해서는 백슬래시가 무시된다. 예를 들어 "\x"는 그냥 "x"라고 입력한 것과 같다.

\%\_LIKE와 같은 패턴 매칭 구문에서 퍼센트 기호와 언더바를 찾을 때 쓰이며, 백슬래시가 없으면 와일드카드 문자(wildcard character)로 쓰인다. 패턴 매칭 구문 밖에서는 와일드카드 문자가 아닌 일반 문자열 "\%"와 "\_"로 그대로 쓰인다. 자세한 내용은 LIKE 조건식을 참고한다.

예제 1

다음은 cubrid.conf의 시스템 파라미터 ansi_quotes가 no이고 no_backslash_escapes가 no일 때 이스케이프를 수행한 결과이다.

SELECT STRCMP(\'single quotes test(\'\')\', \'single quotes test(\\')\');

 

   strcmp(\'single quotes test(\'\')\', \'single quotes test(\'\')\')

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

                                                            0

 

SELECT STRCMP("\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z", "a\bcdefghijklm\nopq\rs\tuvwxyz");

 

   strcmp(\'abcdefghijklm

s       uvwxyz\', \'abcdefghijklm

s       uvwxyz\')

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

                                                                    0

 

SELECT LENGTH(\'\\\');

 

   char_length(\'\\')

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

                  1

예제 2

다음은 cubrid.conf의 시스템 파라미터 ansi_quotes가 yes이고 no_backslash_escapes가 yes일 때 이스케이프를 수행한 결과이다.

SELECT STRCMP(\'single quotes test(\'\')\', \'single quotes test(\\')\');

 

In the command from line 2,

ERROR: unterminated string

 

In the command from line 2,

ERROR: syntax error, unexpected UNTERMINATED_STRING

 

 

SELECT STRCMP("\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z", "a\bcdefghijklm\nopq\rs\tuvwxyz");

 

In line 1, column 18,

ERROR: [\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z] is not defined.

 

In line 1, column 18,

ERROR: [a\bcdefghijklm\nopq\rs\tuvwxyz] is not defined.

 

SELECT LENGTH(\'\\\');

 

   char_length(\'\\\')

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

                   2

예제 3

다음은 cubrid.conf의 시스템 파라미터 ansi_quotes가 yes이고 no_backslash_escapes가 no일 때 이스케이프를 수행한 결과이다.

CREATE TABLE t1 (a varchar(200));

INSERT INTO t1 VALUES (\'aaabbb\'), (\'aaa%\');

 

SELECT a FROM t1 WHERE a LIKE \'aaa\%\' escape \'\\\';

 

  a

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

  \'aaa%\'