database/Oracle

[Oracle] Singlerow_conversion

솧이 2022. 8. 31. 22:15

oracle data type

 

 

묵시적(자동) 변환

javascript

console.log(1 + '1'); //문자열 11

숫자로 된 문자는 산술 연산지 자동적으로 숫자로 변환해준다

SELECT 1 + '1' FROM dual; -- 숫자!

실제로는 아래처럼 형변환 함수가 호출되는 것이다

SELECT 1 + to_number('1') FROM dual;

문자 A를 숫자로 변환시키려고 했기에 에러가 뜬다

SELECT 1 + 'A' FROM dual;

 

형변환 함수 : TO_CHAR, TO_NUMVER, TO_DATE

 

* 묵시적 형변환은 편한 것 같지만 튜닝에서 뜻하지 않은 성능 저하를 가져올 수 있다

* 고로 명시적 형변환을 하는 게 좋다

 

TO_CHAR 함수 (날짜 -> 문자)

문법 : TO_CHAR(날짜, 원하는 모양);

SELECT 
	TO_CHAR(SYSDATE, 'YYYY') 연도4자리,
	TO_CHAR(SYSDATE, 'YY')  연도2자리,
	TO_CHAR(SYSDATE, 'YEAR') 연도영문
FROM dual;
SELECT 
	TO_CHAR(SYSDATE, 'MM') 월2자리,
	TO_CHAR(SYSDATE, 'MON') 월3자리,
	TO_CHAR(SYSDATE, 'MONTH')  월전체,
	TO_CHAR(SYSDATE, 'MON', 'NLS_DATE_LANGUAGE=ENGLISH') 월영문3자리,
	TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE=ENGLISH')  "월영문전체(대)",
	TO_CHAR(SYSDATE, 'month', 'NLS_DATE_LANGUAGE=ENGLISH')  "월영문전체(소)",
	TO_CHAR(SYSDATE, 'Month', 'NLS_DATE_LANGUAGE=ENGLISH')  "월영문전체(첫글자대)"
FROM dual;
SELECT 
	TO_CHAR(SYSDATE, 'DD') 일숫자2자리,
	TO_CHAR(SYSDATE, 'DDTH')  몇번째날,
	TO_CHAR(SYSDATE, 'DAY') 요일,
	TO_CHAR(SYSDATE, 'Dy') 요일앞자리
FROM dual;
SELECT 
	TO_CHAR(SYSDATE, 'HH24') 시24hr,
	TO_CHAR(SYSDATE, 'HH')  시12hr,
	TO_CHAR(SYSDATE, 'MI') 분,
	TO_CHAR(SYSDATE, 'SS') 초
FROM dual;

 

TO_CHAR 함수 (숫자 -> 문자)

SELECT 1234,
		TO_CHAR(1234),
		TO_CHAR(1234, '99999') "9하나당 1자리", -- 5자리에 맞혀서 나왔다
		TO_CHAR(1234, '099999') "빈자리 0으로", -- 빈자리는 0으로 나온다
		TO_CHAR(1234, '$9999') "빈자리 $으로", -- 빈자리는 0으로 나온다
		TO_CHAR(1234.1278, '9999.99') "소수점이하 두자리", -- 반올림되어 나온다
		TO_char(1234, '99,999') "천단위 구분기호" -- 반올림되어 나온다
FROM dual;

 

 

to_number() 함수 :  문자 -> 숫자로 변환

SELECT '123.44', to_number('123.44') FROM dual

 

 

to_date() 함수 : 문자 -> 날짜로 변환

SELECT
	TO_DATE('2022-08-31', 'YYYY-MM-DD') "to-date"
FROM dual;

 

 

'database > Oracle' 카테고리의 다른 글

[Oracle] 그룹 함수 aggregate function  (0) 2022.08.31
[Oracle] Singlerow_Number  (0) 2022.08.31
[Oracle] SingleRow_Null  (0) 2022.08.31
[Oracle] SingleRow_String  (0) 2022.08.31
[Oracle] Oracle  (0) 2022.08.30