변환 함수
변환 함수#
변환 함수는 어떤 데이터 타입의 입력 값을 다른 데이터 타입으로 변환한다.
ASCIISTR#
구문#
ASCIISTR(expr)
설명#
이 함수는 임의의 캐릭터 셋을 갖는 문자열을 ASCII 문자열로 변환해서 반환한다. ASCII가 아닌 문자가 expr에 올 경우, \xxxx와 같이 UTF-16 코드로 표현된다. 반환 타입은 VARCHAR이다.
문자열을 국가 문자 집합(national character set)으로 변환하려면, UNISTR 함수를 사용하라.
예제#
<질의> 입력 문자열을 ASCII 문자열로 변환하라.
SELECT ASCIISTR('ABÄCDE') FROM DUAL;
ASCIISTR('
----------
AB\00C4CDE
1 row selected.
SELECT ASCIISTR('abcåñö') FROM DUAL;
ASCIISTR('ABCÅÑÖ')
------------------
abc\00E5\00F1\00F6
1 row selected.
BIN_TO_NUM#
구문#
BIN_TO_NUM (expr)
설명#
이 함수는 expr을 10진수로 변환한다. expr은 이진수 또는 1과 0으로만 이루어진 최대 길이 32의 문자열이어야 한다. 반환형은 INTEGER이다.
Note
expr에 산술 연산이 있다면, 숫자들은 10진수로 다뤄진다. 그러나 서버 내부에서는 그 산술 연산의 결과로 생기는 수를 10진수가 아닌 2진수로 받아들이기 때문에 결과 숫자는 0과 1로만 이루어져야 한다.
예제#
<질의> 주어진 2진수를 10진수로 변환하라.
SELECT BIN_TO_NUM ('1010') FROM DUAL;
BIN_TO_NUM ('1010')
----------------------
10
1 row selected.
CONVERT#
구문#
CONVERT(expr, dest_char_set [, source_char_set] )
설명#
이 함수는 expr을 source_char_set에서 dest_char_set으로 변환한다. dest_char_set과 source_char_set에는 Altibase가 지원하는 캐릭터 셋이 입력될 수 있다. expr에 source_char_set 에 해당하지 않는 문자가 포함된 경우, 물음표("?")가 반환될 것이다. source_char_set을 생략할 경우 현재 데이터베이스에 설정된 데이터베이스 캐릭터 셋이 source_char_set이 된다.
예제#
<질의> "ABC"라는 글자를 UTF8에서 US7ASCII캐릭터셋으로 변환한다.
SELECT CONVERT( 'ABC', 'US7ASCII', 'UTF8') FROM DUAL;
CONVER
------
ABC
DATE_TO_UNIX#
구문#
DATE_TO_UNIX (expr)
설명#
이 함수는 DATE 타입의 expr을 1970-01-01 00:00:00 (UTC +00:00 타임 존) 기준의 초 단위 값으로 변환하여 반환하다. expr에 입력 가능한 값의 범위는 아래와 같다.
[1970-01-01 00:00:00 - 3999-12-31 23:59:59]
expr이 위 범위의 최소값보다 작으면 최소값을 변환한 결과를, 최대값보다 크면 최대값을 변환한 결과를 반환한다.
예제#
SELECT DATE_TO_UNIX( TO_DATE( '2009-04-07 04:48:30', 'YYYY-MM-DD HH:MI:SS' )) date_to_unix
FROM DUAL;
DATE_TO_UNIX
---------------------------------------------
1239079710
1 row selected.
HEX_DECODE#
구문#
HEX_DECODE(expr)
설명#
이 함수는 16진수 문자열을 ASCII 문자열로 변환해서 반환한다. 반환 타입은 VARCHAR이다.
예제#
<질의> 입력한 16진수 문자열을 ASCII 문자열로 변환하라.
SELECT HEX_DECODE('414241434445') FROM DUAL;
HEX_DECODE('414241434445')
------------------------------
ABACDE
1 row selected.
HEX_ENCODE#
구문#
HEX_ENCODE(expr)
설명#
이 함수는 ASCII 문자열을 각 문자에 대응하는 16진수 문자열로 변환해서 반환한다. 반환 타입은 VARCHAR이다.
예제#
<질의> 입력한 ASCII 문자열을 16진수 문자열로 변환하라.
SELECT HEX_ENCODE('ABACDE') FROM DUAL;
HEX_ENCODE('ABACDE')
------------------------
414241434445
1 row selected.
HEX_TO_NUM#
구문#
HEX_TO_NUM (expr)
설명#
이 함수는 expr을 10진수로 변환한다. expr은 0에서 9까지의 숫자와 A에서 F까지의 알파벳으로 이루어진 최대 길이 8인 문자열이어야 한다.
반환형은 INTEGER이다.
예제#
<질의> 주어진 16진수를 10진수로 변환하라.
SELECT HEX_TO_NUM ('1A') FROM DUAL;
HEX_TO_NUM ('1A')
--------------------
26
1 row selected.
OCT_TO_NUM#
구문#
OCT_TO_NUM (expr)
설명#
이 함수는 expr을 10진수로 변환한다. expr은 0에서 7까지의 숫자로 이루어진 최대 길이 11인 문자열이어야 한다.
반환형은 INTEGER이다.
Note
expr에 산술 연산이 있다면, 숫자들은 10진수로 다뤄진다. 그러나 서버 내부에서는 그 산술 연산의 결과로 생기는 수를 10진수가 아닌 8진수로 받아들이기 때문에 결과 숫자는 0에서 7까지의 숫자로만 이루어져야 한다.
예제#
<질의> 주어진 8진수를 10진수로 변환하라.
SELECT OCT_TO_NUM ('71') FROM DUAL;
OCT_TO_NUM ('71')
--------------------
57
1 row selected.
RAW_TO_INTEGER#
구문#
RAW_TO_INTEGER (expr)
설명#
이 함수는 TO_RAW 함수를 이용하여 VARBYTE로 변환된 값을 다시 INTEGER 데이터 타입으로 반환한다.
예제#
<질의> VARBYTE 타입으로 변환된 '01000000' 값을 INTEGER 데이터 타입으로 출력하라.
SELECT RAW_TO_INTEGER(VARBYTE'01000000') FROM DUAL;
RAW_TO_INTEGER(VARBYTE'01000000')
------------------------------------
1
1 row selected.
RAW_TO_NUMERIC, RAW_TO_FLOAT#
구문#
RAW_TO_NUMERIC (expr)
RAW_TO_FLOAT (expr)
설명#
이 함수는 TO_RAW 함수를 이용하여 VARBYTE 데이터 타입으로 변환된 값을 NUMERIC 또는 FLOAT 데이터 타입으로 변환하여 반환한다.
예제#
<질의> VARBYTE 타입으로 변환된 '02C101' 값을 NUMERIC 데이터 타입으로 출력하라.
SELECT RAW_TO_NUMERIC(VARBYTE'02C101') FROM DUAL;
RAW_TO_NUMERIC(VARBYTE'02C101')
----------------------------------
1
1 row selected.
RAW_TO_VARCHAR#
구문#
RAW_TO_VARCHAR (n)
설명#
이 함수는 실제 VARCHAR 형의 데이터를 TO_RAW 함수를 이용하여 변환된 VARBYTE 형의 값을 다시 VARCHAR 형으로 변환하는 함수이다.
예제#
<질의> TO_RAW 함수로 생성된 VARBYTE 형의 값 '050068656C6C6F' 값을 VARCHAR 데이터로 변환하라.
SELECT RAW_TO_VARCHAR('050068656C6C6F') FROM DUAL;
RAW_TO_VARCHAR('050068656C6C6F')
------------------------------------
hello
1 row selected.
TO_BIN#
구문#
TO_BIN (n)
설명#
이 함수는 n을 이진수로 변환한다. n은 10진수 또는 0에서 9까지의 숫자로 이루어진 문자열이어야 한다.
가능한 입력 값의 범위는 -2147483647에서 2147483647, 즉 -(231-1) 에서 (231-1)이다. 음수가 입력되면, 그 음수의 절대값을 이진후로 변환하여 모든 비트를 반대로 바꾸고 1을 더한 값이 반환된다.
반환 값은 부호가 있다. 앞 부분의 0은 출력되지 않기 때문에, 양수의 경우 부호 값은 보이지 않는다.
반환형은 VARCHAR이다.
예제#
<질의> 주어진 값을 이진수로 변환하라.
SELECT TO_BIN(1000) FROM DUAL;
TO_BIN(1000)
------------------------------------
1111101000
1 row selected.
TO_CHAR(날짜형)#
구문#
TO_CHAR (date [, 'fmt'])
설명#
이 함수는 날짜형의 date를 fmt에 명시된 날짜시간 포맷의 VARCHAR 타입 문자열로 변환하여 반환한다. fmt가 생략되었을 경우 altibase.properties에 있는 DEFAULT_DATE_FORMAT 프로퍼티에 지정된 형식으로 반환될 것이다. DEFAULT_DATE_FORMAT 프로퍼티의 기본값은 DD-MON-RRRR 이다. 날짜형 데이터의 변환에 이용되는 날짜 데이터 형식에 대한 상세한 설명은 General Reference를 참고하기 바란다.
예제#
<질의> 모든 사원의 입사일을 YYYY-MM-DD HH:MI:SS 형식으로 출력하라.
SELECT e_firstname
, e_lastname
, TO_CHAR(join_date, 'YYYY-MM-DD HH:MI:SS') join_date
FROM employees;
E_FIRSTNAME E_LASTNAME JOIN_DATE
---------------------------------------------------------------------------
.
.
.
Farhad Ghorbani 2009-12-20 00:00:00
Ryu Momoi 2010-09-09 00:00:00
Gottlieb Fleischer 2004-01-24 00:00:00
Xiong Wang 2009-11-29 00:00:00
.
.
.
20 rows selected.
TO_CHAR (number)#
구문#
TO_CHAR (n [,'format'])
설명#
이 함수는 입력된 숫자형 값을 VARCHAR 타입으로 변환하여 반환한다. 반환되는 결과의 형식을 지정하는 것이 가능하다.
문자열이 입력되면, 이는 내부적으로 10진수로 받아들여지며 산술식이 포함된 경우 문자형 데이터로 변환되기 전에 산술 연산이 수행될 수도 있다.
format에 가능한 형식은 General Reference 1장의 "숫자형 데이터 형식" 절을 참고하라.
예제#
<질의> 다음 SQL문은 문자열과 숫자를 함축적 변환을 사용하여 숫자로 해석한 후 TO_CHAR 함수를 이용하여 문자형으로 변환하여 출력한다.
SELECT TO_CHAR('01110' + 1) FROM DUAL;
TO_CHAR('01110' + 1)
------------------------------------------------
1111
1 row selected.
<질의> 다음은 숫자를 다양한 형식의 문자열로 출력하는 예를 보여준다.
SELECT TO_CHAR (123, '99999') FROM DUAL;
TO_CHAR (123, '99999')
--------------------------
123
1 row selected.
SELECT TO_CHAR (123.4567, '999999') FROM DUAL;
TO_CHAR (123.4567, '999999')
--------------------------------
123
1 row selected.
SELECT TO_CHAR (1234.578, '9999.99') FROM DUAL;
TO_CHAR (1234.578, '9999.99')
---------------------------------
1234.58
1 row selected.
SELECT TO_CHAR (1234.578, '999.99999') FROM DUAL;
TO_CHAR (1234.578, '999.99999')
-----------------------------------
###########
1 row selected.
TO_DATE#
구문#
TO_DATE (expr [, 'fmt' ])
설명#
TO_DATE는 CHAR, VARCHAR 타입 데이터를 DATE 타입으로 변환한다. fmt는 expr의 날짜 형식을 지정한다. fmt가 생략되었을 경우 expr은 ALTIBASE_DATE_FORMAT환경 변수 또는 DEFAULT_DATE_FORMAT 프로퍼티에 설정된 형식을 따라야 한다.
만약 입력 날짜에 년 또는 월을 명시하지 않은 경우 TO_DATE 함수가 실행된 시점의 년 또는 월의 값이 반환될 것이다. 예를 들어, TO_DATE(TO_CHAR(sysdate,'YYYY'),'YYYY')를 실행한 시각이 2005/08/24 17:32:34일 경우, 실행 결과는 '2005/08/01 00:00:00'이 될 것이다. 입력 날짜에 월을 명시하지 않았으므로 실행 시의 월인 8월과, 일, 시, 분, 초는 초기값인 1일 00시 00분 00초가 결과값이 된다.
예제#
<질의> 2001년 11월 19일에 입사한 사원의 번호, 이름, 성별과 입사일을 입력하라.
INSERT INTO employees(eno, e_lastname, e_firstname, sex, join_date)
VALUES(22, 'Jones', 'Mary', 'F', TO_DATE('2011-11-19 00:00:00', 'YYYY-MM-DD HH:MI:SS'));
<질의> 입력 날짜에 월과 일을 명시하지 않은 경우 TO_DATE 결과
SELECT TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY'), 'YYYY'), 'YYYYMMDD HH24:MI:SS')
FROM DUAL;
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE,'YYYY'),
--------------------------------------------
20080501 00:00:00
1 row selected.
TO_HEX#
구문#
TO_HEX (n)
설명#
이 함수는 n을 16진수로 변환한다. n은 10진수 또는 0에서 9까지의 숫자로 이루어진 문자열이어야 한다.
반환형은 VARCHAR이다.
예제#
<질의> 주어진 값을 16진수로 변환하라.
SELECT TO_HEX(1000) FROM DUAL;
TO_HEX(1000)
----------------
3E8
1 row selected.
TO_INTERVAL, NUMTODSINTERVAL#
구문#
TO_INTERVAL(n, 'interval_unit')
설명#
TO_INTERVAL(NUMTODSINTERVAL) 함수는 n을 interval_unit 단위로 변환해서 반환한다. n은 숫자 타입이나 숫자 타입으로 변환할 수 있는 값을 입력할 수 있으며, SECOND 단위 기준으로 -9e18 ~ 9e18의 범위 내에서 입력할 수 있다.
아래의 표는 interval_unit에 입력할 수 있는 단위를 나타내며, 대소문자를 구별하지 않는다.
INTERVAL | 설명 |
---|---|
YEAR | YY | 년 |
MONTH | MM | 월 |
DAY | DD | 일 |
HOUR | HH | 시간 |
MINUTE | MI | 분 |
SECOND | SS | 초 |
년, 월 단위의 연산은 시스템 호출에 의한 반복적인 오차 누적에 따라 반환 값의 오차가 발생할 수 있다.
예제#
SELECT TO_INTERVAL( 1, 'day') days FROM DUAL;
DAYS
-----------------------
1
1 row selected.
SELECT SYSDATE + TO_INTERVAL( 24 * 60 * 60, 'second') tomorrow
FROM DUAL;
TOMORROW
---------------
16-APR-2015
1 row selected.
SELECT TO_DATE('2015-02-01', 'YYYY-MM-DD') + TO_INTERVAL( 1, 'month' ) next_month
FROM DUAL;
NEXT_MONTH
---------------
03-MAR-2015
1 row selected.
TO_NCHAR(character)#
구문#
TO_NCHAR (expr)
설명#
이 함수는 문자형 데이터를 데이터베이스 캐릭터셋에서 내셔널 캐릭터셋으로 변환한다. 반환형은 NVARCHAR이다.
이 함수는 CONVERT 함수와 동일하다.
예제#
<질의> 문자 '안'을 내셔널 캐릭터셋 UTF-16으로 변환하여 그 정보(dump)를 출력하라. (단, '안'의 code point는 U+C548이다.)
SELECT DUMP( TO_NCHAR('안'), 16 ) FROM DUAL;
DUMP( TO_NCHAR('안'), 16 )
------------------------------------------------------------------------------
Type=NVARCHAR(UTF16) Length=4: 2,0,c5,48
TO_NCHAR(datetime)#
구문#
TO_NCHAR (datetime [,'fmt'])
설명#
이 함수는 날짜형 데이터를 데이터베이스 캐릭터셋에서 내셔널 캐릭터셋으로 변환한다. 반환형은 NVARCHAR이다.
예제#
<질의> 각 사원의 입사일을 내셔널 캐릭터셋으로 변환해서 출력하라.
SELECT e_lastname
, e_firstname
, TO_NCHAR(join_date, 'YYYY-MM-DD HH:MI:SS') join_date
FROM employees;
E_LASTNAME E_FIRSTNAME JOIN_DATE
---------------------------------------------------------------------------
.
.
.
Momoi Ryu 2010-09-09 00:00:00
Fleischer Gottlieb 2004-01-24 00:00:00
Wang Xiong 2009-11-29 00:00:00
Diaz Curtis 2010-06-14 00:00:00
.
.
.
20 rows selected.
TO_NCHAR(number)#
구문#
TO_NCHAR (n [,'fmt'])
설명#
이 함수는 숫자형 데이터를 데이터베이스 캐릭터셋에서 내셔널 캐릭터셋으로 변환한다. 반환형은 NVARCHAR이다.
예제#
SELECT TO_NCHAR('01110' + 1) FROM DUAL;
TO_NCHAR('01110' + 1)
------------------------------------------------
1111
1 row selected.
TO_NUMBER, PLUS#
구문#
TO_NUMBER (char [, number_fmt] )
설명#
TO_NUMBER 함수는 문자열 char를 숫자 데이터 타입으로 변환한다. 사용자는 원하는 숫자 출력 형식을 지정할 수 있다. 숫자 출력 형식에 대한 자세한 설명은 General Reference 를 참고하기 바란다.
반환형은 FLOAT이다.
PLUS는 TO_NUMBER와 같은 함수이다.
예제#
<질의> 문자열 200.00을 FLOAT로 변환하여 그 값을 이용해서 갱신하라.
UPDATE employees
SET salary = salary + TO_NUMBER( '200.00')
WHERE eno = 10;
<질의> 문자열을 다양한 숫자 출력 형식으로 변환하라.
SELECT TO_NUMBER ( '0123.4500', '0990.9909' ) FROM DUAL;
TO_NUMBER ( '0123.4500', '0990.9909' )
-----------------------------------------
123.45
1 row selected.
SELECT TO_NUMBER ( '$12,3.45-', '09,$0.00S' ) FROM DUAL;
TO_NUMBER ( '$12,3.45-', '09,$0.00S' )
-----------------------------------------
-123.45
1 row selected.
SELECT TO_NUMBER ( '<$183.5>', '$9,000.0PR' ) FROM DUAL;
TO_NUMBER ( '<$183.5>', '$9,000.0PR' )
-----------------------------------------
-183.5
1 row selected
TO_OCT#
구문#
TO_OCT (n)
설명#
이 함수는 주어진 n을 8진수로 변환한다. n은 10진수 또는 0에서 9까지의 수로 이루어진 문자열이어야 한다.
반환형은 VARCHAR이다.
예제#
<질의> 주어진 값을 8진수로 변환하라.
SELECT TO_OCT(1000) FROM DUAL;
TO_OCT(1000)
----------------
1750
1 row selected.
TO_RAW#
구문#
TO_RAW (n)
설명#
이 함수는 n에 입력한 모든 데이터 타입의 값을 VARBYTE 타입의 형태로 변환하여 반환한다.
예제#
<질의> 입력한 값을 VARBYTE 타입으로 출력하라.
SELECT TO_RAW(1000) FROM DUAL;
TO_RAW(1000)
----------------
E803
1 row selected.
UNISTR#
구문#
UNISTR(expr)
설명#
이 함수는 입력 문자열을 내셔널 캐릭터셋으로 변환한다.
expr은 유니코드로 인코딩된 값일 수 있다. 유니코드로 인코딩된 값은 \xxxx와 같은 UTF16 코드 유닛으로 입력된다. 반환 타입은 NVARCHAR이다.
ASCIISTR 함수와는 반대되는 기능을 하는 함수이다.
예제#
<질의> ASCII 문자와 유니코드로 인코딩된 문자가 같이 들어있는 문자열을 내셔널 캐릭터셋으로 변환하라.
SELECT UNISTR('abc\00e5\00f1\00f6') FROM DUAL;
UNISTR
------
abcåñö
1 row selected.
UNIX_TO_DATE#
구문#
UNIX_TO_DATE (expr)
설명#
이 함수는 expr을 DATE 타입으로 변환하여 반환하다. expr은 아래와 같은 값이어야 한다.
-
1970-01-01 00:00:00 (UTC +00:00 타임 존) 기준의 초 단위 값
-
값의 범위: 0 ~ 64060588799
expr이 위 범위의 최소값보다 작으면 최소값을 변환한 결과를, 최대값보다 크면 최대값을 변환한 결과를 반환한다.
예제#
SELECT TO_CHAR( UNIX_TO_DATE( 1239079710 ), 'YYYY-MM-DD HH:MI:SS' ) unix_to_date
FROM DUAL;
UNIX_TO_DATE
--------------------------------------------------------------
2009-04-07 04:48:30
1 row selected.