-- Standard function
-- DUAL : 가상 테이블 -> 결과 확인용 임시 테이블
SELECT 1 FROM DUAL;
SELECT 'A' FROM DUAL;
SELECT '가' FROM DUAL;
SELECT 32 * 24 FROM DUAL;
-- 문자함수
-- CHR(N) : ASCII 값을 문자로 변환
SELECT CHR(65) FROM DUAL;
SELECT CHR(97) FROM DUAL;
-- 내 점수는 A 입니다.
SELECT '내 점수는' || CHR(65) || ' 입니다' FROM DUAL;
-- java 에선 "내 점수는" + CHR(65) + " 입니다" 와 같다
-- 논리연산자인 OR 연산(||)이 +의 역활을 한다.
-- LPAD(RPAD) : 나머지를 빈칸 (특정문자) 으로 채운다
SELECT LPAD('BBB', 10) FROM DUAL;
SELECT RPAD('BBB', 10) FROM DUAL;
--오버 로드가 가능하다
SELECT LPAD('BBB', 10, '-') FROM DUAL;
-- INSTR == indexOf('a') java - > 0부터 db -> 1 부터
-- 1부터 시작해서 4가 나온다
SELECT INSTR('123A456B678C', 'A') FROM DUAL;
-- 9 이후로 찾기
SELECT INSTR('123A456B678CB', 'B', 9) FROM DUAL;
-- 4번째 이후로 1번째 있는 B를 찾아라
SELECT INSTR('123A456B678CB', 'B', 4, 1) FROM DUAL;
-- 4번째 이후로 2번째있는 B를 찾아라
SELECT INSTR('123A456B678CB', 'B', 4, 2) FROM DUAL;
-- REPLACE : 문자열 치환
-- BCD
SELECT REPLACE('AAAAABCD', 'A') FROM DUAL;
-- A를 a로 치환 aaaaabcd
SELECT REPLACE('AAAAABCD', 'A', 'a') FROM DUAL;
-- aaABCD
SELECT REPLACE('AAAAABCD', 'AA', 'a') FROM DUAL;
-- TRANSLATE : 문자 치환
--aaaaaBCD
SELECT TRANSLATE('AAAAABCD', 'A', 'a') FROM DUAL;
--문자열이 아닌 문자 치환이라 aaaaaBCD가 된다.
SELECT TRANSLATE('AAAAABCD', 'AA', 'a') FROM DUAL;
-- 숫자 함수
-- 올림
SELECT CEIL(13.1) FROM DUAL;
-- 내림
SELECT FLOOR(13.9) FROM DUAL;
-- 나눈 나머지
-- 1
SELECT MOD(3, 2) FROM DUAL;
-- 제곱
-- 9
SELECT POWER(3, 2) FROM DUAL;
-- 반올림
-- 13
SELECT ROUND(13.4) FROM DUAL;
-- 14
SELECT ROUND(13.5) FROM DUAL;
-- 부호 +:1 0:0 -:-1
-- 1
SELECT SIGN(13.4) FROM DUAL;
-- 0
SELECT SIGN(0) FROM DUAL;
-- -1
SELECT SIGN(-3.4) FROM DUAL;
-- 버림
-- 날짜 버리기등에 사용
-- 12
SELECT TRUNC(12.3456) FROM DUAL;
-- 소수점 2째자리 이후부터 버린다
-- 12.34
SELECT TRUNC(12.3456, 2) FROM DUAL;
-- 10
SELECT TRUNC(12.3456, -1) FROM DUAL;
-- CHR 함수와 상반되는 함수
-- CHR < - > ASCII
SELECT ASCII('A') FROM DUAL;
-- 가장 많이쓰이는 함수
-- 변환 함수
-- TO_CHAR
-- DATE -> STRING
SELECT TO_CHAR(SYSDATE)
FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD-HH-MI-SS')
FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS')
FROM DUAL;
-- 문자열로 나간다
-- $10,000,000,000
SELECT TO_CHAR(10000000000, '$999,999,999,999')
FROM DUAL;
-- TO_DATE
-- STRING -> DATE
-- 19/12/25
SELECT TO_DATE('20191225', 'YYYYMMDD')
FROM DUAL;
-- 19/12/25
SELECT TO_DATE('12252019', 'MMDDYYYY')
FROM DUAL;
-- TO_NUMBER -> parseInt
SELECT TO_NUMBER('112') + 24
FROM DUAL;
-- LAST_DAY
SELECT LAST_DAY(SYSDATE)
FROM DUAL;
-- 해당 달의 마지막 날짜
SELECT LAST_DAY('19/11/01')
FROM DUAL;
SELECT LAST_DAY('191101')
FROM DUAL;
SELECT LAST_DAY(TO_DATE('19/11/01', 'YYYY/MM/DD'))
FROM DUAL;
SELECT LAST_DAY(TO_DATE('19-11-01', 'YYYY-MM-DD'))
FROM DUAL;
-- SUBSTR subString(1, 3) "ABCDE" -> "BC"
-- 3번째 문자 부터 끝까지 CDE
SELECT SUBSTR('ABCDE', 3)
FROM DUAL;
--3번째 문자부터 2개의 문자까지
SELECT SUBSTR('ABCDE', 3, 2)
FROM DUAL;
-- LENGTHB -> 문자의 길이 BYTE형식
-- LENGTH -> 문자길이
SELECT LENGTH('ABCDE') FROM DUAL;
-- MONTH_BETWEEN 찾아보기
-- 9달 차이
SELECT MONTHS_BETWEEN(TO_DATE('12012019', 'MMDDYYYY') , TO_DATE('20190301', 'YYYYMMDD')) FROM DUAL;