리터럴
Tibero SQL 문장에서 연산식이나 조건식의 일부로 사용가능한 상수값인 리터럴(Literal)을 소개합니다.
리터럴(Literal)은 상수 값을 나타내는 단어로 상수란 변수에 대응되는 개념으로 말 그대로 변하지 않는 값을 의미합니다. 리터럴은 SQL 문장에서 연산식이나 조건식의 일부로 사용할 수 있습니다. 또한 문자열 리터럴은 작은따옴표를 사용하여 다른 스키마 객체와 구분합니다.
문자열 리터럴
문자열 리터럴은 문자열을 표현할 때 사용하는 리터럴 입니다.
특징
최대 4,000byte까지 선언할 수 있습니다.
연산식이나 조건식에 문자열 리터럴이 사용되면 문자열 리터럴은 CHAR 타입으로 취급됩니다.
CHAR 타입의 데이터와 문자형 리터럴을 비교하는 경우, 더 짧은 길이를 가진 데이터에 공백 문자를 삽입하여 비교합니다.
VARCHAR 타입의 데이터와 문자형 리터럴을 비교하는 경우 공백 문자를 삽입하지 않고 비교합니다.
문법
구성요소
c
사용자의 문자 집합에 속한 문자
’
문자열 리터럴 안에서 이스케이프 부호(Escape Code) 사용 시 문자 양쪽에 작은따옴표(' ') 기입
문자열 리터럴 안에 작은따옴표를 표현하려면 작은따옴표를 두 번 연속해서 사용
문자열 리터럴 안에 작은따옴표를 일반문자와 같이 취급하려면 q string 사용q'[[string]]'$,q'"[string]"'$,q'|[string]|'$ q'$[string]'$ 으로 문자열 리터럴을 사용하면 [string] 내부의 작은따옴표는 일반 문자와 같이 취급
예시
아래는 문자열 리터럴의 예시 입니다.
'Tibero'
'Database'
'2009/11/11'
숫자 리터럴
숫자 리터럴은 정수 또는 실수를 표현할 때 사용하는 리터럴 입니다.
특징
정수 리터럴과 실수 리터럴이 있습니다.
NUMBER 타입이 표현할 수 있는 최대 38자리의 정밀도를 초과하는 경우 숫자 리터럴은 NUMBER 타입의 최대 정밀도에 맞춘 후 나머지 수를 반올림 처리합니다.
NUMBER 타입이 표현할 수 있는 범위 를 넘어서는 숫자 리터럴이 입력되면 오류가 발생합니다.
부동 소수점 리터럴
BINARY_FLOAT_NAN
단일 정밀도 NaN(Not A Number)
BINARY_FLOAT_INFINITY
단일 정밀도 양의 무한대
BINARY_DOUBLE_NAN
2배 정밀도 NaN(Not A Number)
BINARY_DOUBLE_INFINITY
2배 정밀도 양의 무한대
문법
구성요소
digit
0 ~ 9 사이의 숫자 하나를 의미
+ / -
숫자 앞의 부호(양수 또는 음수)를 의미
.
소수점을 의미
e, E
과학적 기수법(Scientific Notation)으로 표기할 때 사용
(예시: 8.33e-4는 0.000833을, 8.33e+4는 83,300을 의미 e나 E 다음에 나오는 숫자는 지수로, -130 ~ 125 사이의 값으로 지수 지정 필요
f, F
BINARY_FLOAT 타입을 나타내고, 32비트 부동 소수점 숫자
d, D
BINARY_DOUBLE 타입을 나타내고, 64비트 부동 소수점 숫자
예시
아래는 숫자 리터럴의 예시 입니다.
123
+1.23
0.123
123e-123
-123
아래는 부동 소수점 리터럴의 예시 입니다.
123f
+1.23F
0.123d
-123D
날짜형 리터럴
날짜형 리터럴은 날짜와 시간 정보를 표현하는 리터럴 입니다.
DATE
DATE 리터럴은 날짜와 시간 정보를 표현하는 날짜형 리터럴 입니다.
특징
특별한 속성: 세기, 년, 월, 일, 시, 분, 초의 특별한 속성이 있습니다.
날짜형 리터럴 변환: Tibero에서는 TO_DATE 함수를 사용하여 날짜 값을 직접 지정하거나 문자 리터럴이나 숫자 리터럴로 표현된 날짜 값을 DATE 리터럴로 변환할 수 있습니다. 이때 날짜를 리터럴로 표현 시 그레고리안 달력을 사용합니다.
TO_DATE('2005/01/01 12:38:20', 'YY/MM/DD HH24:MI:SS')
기본 날짜 형식은 'YYYY/MM/DD'이며 초기화 파라미터 파일에는 날짜 형식을 지정하는 파라미터인NLS_DATE_FORMAT로 정의되어 있습니다.
시간 정보가 없는 값으로 DATE 리터럴 표현 시, 기본 시간은 자정 (HH24 00:00:00, HH 12:00:00)입니다.
날짜 정보가 없는 값으로 DATE 리터럴 표현 시. 기본 날짜는 현재 시스 템의 시간을 기준으로 달의 첫째 날로 지정됩니다.
따라서 DATE 리터럴을 비교할 때는 리터럴의 시간정보가 포함된 오류인지 확인이 필요합니다.
한쪽에만 시간 정보가 있고 다른 쪽에는 시간 정보가 없을 경우 두 날짜가 같다고 비교하기 위해서는 TRUNC 함수를 사용해 시간 정보를 제거하고 비교합니다.
아래는 TRUNC 함수를 사용한 예시입니다.
TO_DATE('2005/01/01', 'YY/MM/DD') =
TRUNC(TO_DATE('2005/01/01 12:38:20', 'YY/MM/DD HH24:MI:SS'))
ANSI 표현
DATE '2005-01-01'
시간 정보가 없습니다.
기본 형식은 'YYYY-MM-DD' 입니다.
구분자는 하이픈(-) 외에도 슬래시(/), 애스터리스크(*), 점(.) 등이 있습니다.
TIME
TIME 리터럴은 시간 정보를 표현하는 날짜형 리터럴 입니다.
특징
특별한 속성: 시, 분, 초, 소수점 아래의 초의 특별한 속성이 있습니다.
날짜형 리터럴 변환: Tibero에서는 TO_TIME 함수를 사용하여 시간 값을 직접 지정하거나 문자 리터럴이나 숫자 리터럴로 표현된 시간 값을 TIME 리터럴로 변환할 수 있습니다.
기본 시간 형식은 초기화 파라미터 파일에 NLS_TIME_FORMAT 파라미터로 정의되어 있습니다.
TO_TIME('12:38:20.123456789', 'HH24:MI:SSXFF')
ANSI 표현
TIME '10:23:10.123456789'
TIME '10:23:10'
TIME '10:23'
TIME '10'
기본 형식은 'HH24:MI:SS.FF9' 입니다.
분 이하는 생략할 수 있습니다.
TIMESTAMP
TIMESTAMP 리터럴은 DATE 리터럴을 확장한 날짜형 리터럴 입니다.
특징
특별한 속성: 년, 월, 일'의 날짜와 '시, 분 ,초', '소수점 아래의 초'의 특별한 속성이 있습니다.
날짜형 리터럴 변환: Tibero에서는 TO_TIMESTAMP 함수를 사용하여 문자열 리터럴이나 숫자 리터럴로 표현된 날짜 값을 TIMESTAMP 리터럴로 변환할 수 있습니다.
TO_TIMESTAMP('09-Aug-01 12:07:15.50', 'DD-Mon-RR HH24:MI:SS.FF')
기본 TIMESTAMP 형식은 초기화 파라미터 파일에 TIMESTAMP 형식을 지정하는 파라미터인NLS_TIMESTAMP_FORMAT 로 정의되어 있습니다.
ANSI 표현
TIMESTAMP '2005/01/31 08:13:50.112'
TIMESTAMP '2005/01/31 08:13:50'
TIMESTAMP '2005/01/31 08:13'
TIMESTAMP '2005/01/31 08'
TIMESTAMP '2005/01/31'
기본 형식은 'YYYY/MM/DD HH24:MI:SSxFF' 입니다.
날짜 부분('YYYY/MM/DD') 이외에는 생략할 수 있습니다.
소수점 아래의 초('FF') 부분은 0~9자리까지 표현할 수 있습니다.
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH TIME ZONE 리터럴은 TIMESTAMP 리터럴을 확장한 날짜형 리터럴 입니다.
특징
기본속성: 년TIMESTAMP 타입과 동일하게 '년, 월, 일'의 날짜와 '시, 분 ,초', '소수점 아래의 초'의 속성이 있습니다.
날짜형 리터럴 변환: Tibero에서는 TO_TIMESTAMP_TZ 함수를 사용하여 문자열 리터럴이나 숫자 리터럴로 표현된 날짜 값 을 TIMESTAMP WITH TIME ZONE 리터럴로 변환할 수 있습니다.
TO_TIMESTAMP_TZ('2004-05-15 19:25:43 Asia/Seoul', 'YYYY-MM-DD HH24:MI:SS.FF TZR')
TO_TIMESTAMP_TZ('1988-11-21 10:31:58.754 -07:30', 'YYYY-MM-DD HH24:MI:SS.FF TZH:
TZM')
기본 TIMESTAMP WITH TIME ZONE 형식은 초기화 파라미터 파일에 TIMESTAMP WITH TIME ZONE 형식을 지정하는 파라미터인NLS_TIMESTAMP_TZ_FORMAT로 정의되어 있습니다.
ANSI 표현
TIMESTAMP '1993/12/11 13:37:43.27 Asia/Seoul'
TIMESTAMP '1993/12/11 13:37:43.27 +09:00'
TIMESTAMP '1993/12/11 13:37:43.27 +07'
기본 형식은 'YYYY/MM/DD HH24:MI:SSXFF TZR' 입니다.
소수점 아래의 초('FF') 부분은 0~9자리까지 표현할 수 있습니다.
시간대('TZR') 부분은 지역이름 또는 오프셋 형식으로 표현할 수 있습니다. 시간대('TZR') 부분을 생략하는 경우는 TIMESTAMP 타입 리터럴로 해석됩니다.
TIMESTAMP WITH LOCAL TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE 리터럴은 TIMESTAMP 리터럴과 동일한 형식을 사용합니다.
간격 리터럴
간격 리터럴(Interval literal) 은 특정 시간과 시간 사이의 간격을 표현하는 리터럴 입니다. 이러한 간격은 '연 과 월'로 구성된 단위나 '날짜, 시간, 분, 초'로 구성된 단위 중 하나로 표현될 수 있습니다.
Tibero에서는 간격 리터럴을 아래와 같이 두 가지 타입으로 지원합니다.
YEAR TO MONTH: 간격을 가장 가까운 월 단위로 표현하는 타입 입니다.
DAY TO SECOND: 간격을 가장 가까운 분 단위로 표현하는 타입 입니다.
이처럼 각 타입의 리터럴은 첫 번째 필드와 생략 가능한 두 번째 필드로 구성됩니다. 또한 간격 리터럴은 같은 타입의 간격 리터럴끼리 서로 더하거나 뺄 수 있습니다.
첫 번째 필드는 표현할 날짜 또는 시간의 기본 단위를 정의합니다.
두 번째 필드는 기본 단위의 최소 증가 단위를 나타냅니다.
YEAR TO MONTH
YEAR TO MONTH 타입은 간격을 연과 월로 표현하는 간격 리터럴 입니다.
문법
구성 요소
integer [-integer]
리터럴의 첫 번째와 생략 가능한 두 번째 필드의 값 표기
첫 번째 필드가 YEAR이고, 두 번째 필드가 MONTH이면 두 번째 필드는 0과 11 사이의 값으로 존재 이때 두 번째 필드는 첫 번째 필드보다 더 작은 단위를 나타내야 함 즉, MONTH TO YEAR는 잘못된 표현
precision
YEAR 단위의 최대 정밀도
0~9 사이의 값 (기본값: 2)
예시
INTERVAL '12-3' YEAR TO MONTH
INTERVAL '123' YEAR(3)
INTERVAL '123' MONTH
INTERVAL '1' YEAR
INTERVAL '1234' MONTH(3)
DAY TO SECOND
DAY TO SECOND 타입은 간격을 '날짜, 시간, 분, 초'로 표현하는 간격 리터럴 입니다.
문법
구성요소
integer
일 수
time_expr
HH[:MI[:SS[.n]]] 또는 MI[:SS[.n]] 또는 SS[.n]과 같은 형식으로 표기
n: 초의 소수점 아래 자리 의미
n이 fractional_seconds_precision에 명시된 값보다 큰 자릿수의 값이면 n은 fractional_seconds_precision 값에 맞추어 반올림 첫 번째 필드가 DAY인 경우에는 일 수를 표시하는 정수와 공백 문자 이후에 time_expr을 표시
leading_precision
첫번째 필드의 정밀도를 나타낸다.
0~9 사이의 정수값 (기본값: 2)
fractional_seconds_precision
리터럴의 두 번째 필드의 정밀도
1~9 사이의 값 (기본값: 6)
두 번째 필드는 첫 번째 필드보다 더 작은 단위를 나타내야 함 (MINUTE TO DAY는 잘못된 표현 )
두 번째 필드가 HOUR, MINUTE 또는 SECOND일 경우에는 각각 0 ~ 23, 0 ~ 59, 그리고 0 ~ 59.999999999 사이의 값 가져야 함
예시
INTERVAL '1 2:3:4.567' DAY TO SECOND(3)
INTERVAL '1 2:3' DAY TO MINUTE
INTERVAL '123 4' DAY(3) TO HOUR
INTERVAL '123' DAY(3)
INTERVAL '12:34:56.1234567' HOUR TO SECOND(7)
INTERVAL '12:34' HOUR TO MINUTE
INTERVAL '12' HOUR
INTERVAL '12:34' MINUTE TO SECOND
INTERVAL '12' MINUTE
INTERVAL '12.345678' SECOND(2,6)
Last updated