- 21. 변환 함수 2022.03.12
- 20. 날짜 연산 함수 2022.03.12
- 19. 숫자 처리 함수 2022.03.12
- SQL Developer theme(dracula) 적용 2022.03.11
- 18. LPAD(), LTRIM(), TRANSLATE(), REPLACE() 2022.03.11
- 17. LENGTH(), INSTR(), REVERSE() 2022.03.10
- 16. CONCAT(), SUBSTR() 2022.03.10
- 15. ORDER BY 절 2022.03.09
- 14. COMMIT / ROLLBACK, DML구문 2022.03.07
- 13. LIKE, %, _ 2022.03.07
- TO_CHAR() : 숫자나 날짜 데이터를 문자 타입으로 변환시켜주는 함수
- TO_DATE() : 문자 데이터를 날짜 타입으로 변환시켜주는 함수
- TO_NUMBER() : 문자 데이터를 숫자 타입으로 변환시켜주는 함수
※ 날짜나 통화 형식이 맞지 않을 경우 설정값을 통해 세션을 설정하여 사용할 수 있다.
ALTER SESSION SET NLS_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_CURRENCY = '\\';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
날짜형 → 문자형
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') -- 2022-02-22 (이건 문자형임)
, TO_CHAR(SYSDATE, 'YYYY') -- 2022
, TO_CHAR(SYSDATE, 'YEAR') -- TWENTY TWENTY-TWO
, TO_CHAR(SYSDATE, 'MM') -- 02
, TO_CHAR(SYSDATE, 'MONTH') -- 2월
, TO_CHAR(SYSDATE, 'MON') -- 2월
, TO_CHAR(SYSDATE, 'DD') -- 22
, TO_CHAR(SYSDATE, 'MM-DD') -- 02-22
, TO_CHAR(SYSDATE, 'DAY') -- 화요일
, TO_CHAR(SYSDATE, 'DY') -- 화
, TO_CHAR(SYSDATE, 'HH24') -- 16
, TO_CHAR(SYSDATE, 'HH') -- 04
, TO_CHAR(SYSDATE, 'HH AM') -- 04 오후
, TO_CHAR(SYSDATE, 'HH PM') -- 04 오후
-- AM이든 PM이든 지금 기준으로 출력
, TO_CHAR(SYSDATE, 'MI') -- 19
, TO_CHAR(SYSDATE, 'SS') -- 45
, TO_CHAR(SYSDATE, 'SSSS') -- 59369
-- 오늘 날짜의 자정부터 지금까지 흘러온 전체 초
, TO_CHAR(SYSDATE, 'Q') -- 1
FROM DUAL;
-- 다 문자형
SELECT 7 -- 숫자 우측 정렬
, '7' -- 문자 좌측 정렬
, TO_CHAR(7) -- 좌측 정렬
FROM DUAL;
--> 조회 결과 정렬 확인하기
EXTRACT()
SELECT TO_CHAR(SYSDATE, 'YYYY') -- 2022(문자형) → 연도를 추출하여 문자 타입으로 변환
, TO_CHAR(SYSDATE, 'MM') -- 02(문자형) → 월을 추출하여 문자 타입으로 반환
, TO_CHAR(SYSDATE, 'DD') -- 22(문자형) → 일을 추출하여 문자 타입으로 반환
, EXTRACT(YEAR FROM SYSDATE) -- 2022(숫자형) → 연도를 추출하여 숫자 타입으로 반환
, EXTRACT(MONTH FROM SYSDATE) -- 2 (숫자형) → 월을 추출하여 숫자 타입으로 반환
, EXTRACT(DAY FROM SYSDATE) -- 22 (숫자형) → 일을 추출하여 숫잩 타입으로 반환
FROM DUAL;
--> 연, 월, 일 이외의 다른 항목은 불가~!!
TO_CHAR() 항목 → 형식 맞춤 표기 결과값 반환
SELECT 60000
, TO_CHAR(60000, '99,999')
, TO_CHAR(60000, '$99,999')
, TO_CHAR(60000, 'L99,999') -- (기본 통화가 단일 특수 기호로 표현되지 않는 기호를 위해 공간을 많이 확보)
, LTRIM(TO_CHAR(60000, 'L99,999')) -- 이렇게 하면 공백 지울 수 있음
FROM DUAL; -- 모두 좌측 정렬임
--==>> 60000 60,000 $60,000 ₩60,000 ₩60,000
세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
(앞에서 배운 방식)
현재 시간을 기준으로 1일 2시간 3분 4초 후를 조회한다.
SELECT SYSDATE "현재 시간"
, SYSDATE + 1 + (2/24) + (3/(24*60)) + (4/(24*60*60)) "1일2시간3분4초후"
FROM DUAL;
--==>> 2022-02-22 16:48:13
-- 2022-02-23 18:51:17
(TO_YMINTERVL(), TO_DSINTERVAL() 사용해서)
현재 시간을 기준으로 1년 2개월 3일 4시간 5분 6초 후를 조회한다. TO_YMINTERVL(), TO_DSINTERVAL() -- (앞에는 년, 월 뒤에는 일 초 단위 함수)
SELECT SYSDATE "현재 시간"
, SYSDATE + TO_YMINTERVAL('01-02') + TO_DSINTERVAL('003 04:05:06') "연산 시간" -- (매개변수는 문자타입)
FROM DUAL;
--==>>
/*
2022-02-22 17:04:53
2023-04-25 21:09:59
*/
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
23. VIEW (0) | 2022.03.12 |
---|---|
22. CASE 구문(조건문, 분기문) (0) | 2022.03.12 |
20. 날짜 연산 함수 (0) | 2022.03.12 |
19. 숫자 처리 함수 (0) | 2022.03.12 |
SQL Developer theme(dracula) 적용 (0) | 2022.03.11 |
날짜 관련 세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
날짜 연산의 기본 단위는 DAY(일수)
SELECT SYSDATE "COL1" -- 2022-02-22 09:44:04
, SYSDATE + 1 "COL2" -- 2022-02-23 09:44:04 → 하루 뒤
, SYSDATE - 2 "COL3" -- 2022-02-20 09:44:04 → 이틀 전
, SYSDATE - 30 "COL4" -- 2022-01-23 09:44:04 → 30일 전
FROM DUAL;
시간 단위 연산
SELECT SYSDATE "COL1" -- 2022-02-22 09:46:21
, SYSDATE + 1/24 "COL2" -- 2022-02-22 10:46:21 → 한 시간 뒤
, SYSDATE - 2/24 "COL3" -- 2022-02-22 07:46:21 → 두 시간 전
FROM DUAL;
현재 시간과 현재 시간 기준 1일 2시간 3분 4초 후를 조회하는 쿼리문을 구성해보면 다음과 같다.
방법 1.
SELECT SYSDATE "현재 시간"
, SYSDATE + 1 + (2/24) + (3/(24*60)) + (4/(24*60*60)) "연산 후 시간"
FROM DUAL;
--==>> 2022-02-22 10:17:37
-- 2022-02-23 12:20:41
방법 2
SELECT SYSDATE "현재 시간"
, SYSDATE + ((1*24*60*60) + (2*60*60) + (3*60) + 4) / (24*60*60) "연산 후 시간"
FROM DUAL;
--==>> 2022-02-22 10:19:20
-- 2022-02-23 12:22:24
날짜 - 날짜 = 일수
SELECT TO_DATE('2022-06-20', 'YYYY-MM-DD') - TO_DATE('2022-02-22', 'YYYY-MM-DD') "RESULT"
FROM DUAL;
--==>> 118
데이터 타입의 변환
SELECT TO_DATE('2022-06-20', 'YYYY-MM-DD') "RESULT"
FROM DUAL;
--==>> 2022-06-20 00:00:00
SELECT TO_DATE('2022-06-35', 'YYYY-MM-DD') "RESULT"
FROM DUAL;
--==>> 에러 발생
-- ORA-01847: day of month must be between 1 and last day of month
※ TO_DATE() 함수를 통해 문자 타입을 날짜 타입으로 변환을 수행하는 과정에 해당 날짜에 대한 유효성 검사가 이루어진다.
ADD_MONTHS()
- 개월 수를 더해주는 함수
SELECT SYSDATE "COL1"
, ADD_MONTHS(SYSDATE, 2) "COL2"
, ADD_MONTHS(SYSDATE, -3) "COL3"
FROM DUAL;
--==>>
/*
2022-02-22 10:30:04 → 현재
2022-04-22 10:30:04 → 2개월 후
2021-11-22 10:30:04 → 3개월 전
*/
MONTHS_BETWEEN()
- 첫 번째 인자값에서 두 번째 인자값을 뺀 개월 수를 반환한다.
SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2002-05-31', 'YYYY-MM-DD')) "RESULT"
FROM DUAL;
--==>> 236.723857526881720430107526881720430108
결과값의 부호가 『-』인 경우에는 첫 번째 인자값 날짜보다 두 번째 인자값 날짜가 『미래』임
NEXT_DAY()
SELECT NEXT_DAY(SYSDATE, '토') "COL1" -- 돌아오는 가장 빠른 토요일 구함
, NEXT_DAY(SYSDATE, '월') "COL2"
FROM DUAL;
--==>> 2022-02-26 10:38:22
-- 2022-02-28 10:38:22
ALTER SESSION SET NLS_DATE_LANGUAGE = 'ENGLISH'; -- 영어로 변경
SELECT NEXT_DAY(SYSDATE, '토') "COL1"
FROM DUAL;
--==>> 에러 발생 (언어가 영어여서)
-- ORA-01846: not a valid day of the week
SELECT NEXT_DAY(SYSDATE, 'SAT') "COL1"
FROM DUAL;
--==>> 2022-02-26 10:38:22
ALTER SESSION SET NLS_DATE_LANGUAGE = 'KOREAN'; -- 한국어로 변경
LAST_DAY()
- 해당 날짜가 포함되어있는 그 달의 마지막 날을 반환한다.
SELECT LAST_DAY(SYSDATE) "COL1"
, LAST_DAY(TO_DATE('2020-02-10', 'YYYY-MM-DD')) "COL2"
FROM DUAL;
--==>>
/*
2022-02-28 10:44:54
2020-02-29 00:00:00
*/
참고로 세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
※ 날짜 데이터를 대상으로 반올림, 절삭 등의 연산을 수행할 수 있다.
날짜 반올림
SELECT SYSDATE "COL1" -- 2022-02-22 → 기본 현재 날짜
, ROUND(SYSDATE, 'YEAR') "COL2" -- 2022-01-01 → 년도까지 유효한 데이터(상반기/하반기 기준)
, ROUND(SYSDATE, 'MONTH') "COL3" -- 2022-03-01 → 월까지 유효한 데이터 (15일 기준)
, ROUND(SYSDATE, 'DD') "COL4" -- 2022-02-23 → 일까지 유효한 데이터 (정오 기준)
, ROUND(SYSDATE, 'DAY') "COL5" -- 2022-02-20 → 일까지 유요한 데이터 (수요일 정오 기준)
FROM DUAL;
날짜 절삭
SELECT SYSDATE "COL1" -- 2022-02-22 → 기본 현재 날짜
, TRUNC(SYSDATE, 'YEAR') "COL2" -- 2022-01-01 → 년도까지 유효한 데이터
, TRUNC(SYSDATE, 'MONTH') "COL3" -- 2022-02-01 → 월까지 유효한 데이터
, TRUNC(SYSDATE, 'DD') "COL4" -- 2022-02-22 → 일까지 유효한 데이터
, TRUNC(SYSDATE, 'DAY') "COL5" -- 2022-02-20 → 그 전 주에 해당하는 일요일
FROM DUAL;
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
22. CASE 구문(조건문, 분기문) (0) | 2022.03.12 |
---|---|
21. 변환 함수 (0) | 2022.03.12 |
19. 숫자 처리 함수 (0) | 2022.03.12 |
SQL Developer theme(dracula) 적용 (0) | 2022.03.11 |
18. LPAD(), LTRIM(), TRANSLATE(), REPLACE() (0) | 2022.03.11 |
ROUND()
반올림을 처리해주는 함수
SELECT 48.678 "COL1" -- 48.678
, ROUND(48.678, 2) "COL2" -- 48.68 (두 번째 파라미터 까지 유효한 표현이다)
, ROUND(48.674, 2) "COL3" -- 48.67
, ROUND(48.674, 1) "COL4" -- 48.7
, ROUND(48.674, 0) "COL5" -- 49
, ROUND(48.674) "COL6" -- 49 -- 두 번째 파라미터 값이 0일 경우 생략 가능
, ROUND(48.674, -1) "COL7" -- 50
, ROUND(68.674, -2) "COL8" -- 100
, ROUND(48.674, -3) "COL9" -- 0
FROM DUAL;
--==>> 48.678 46.68 46.67 46.7 47 47 50 0 0
TRUNC()
절삭을 처리해 주는 함수
SELECT 48.678 "COL1" -- 48.678
, TRUNC(48.678, 2) "COL2" -- 48.67 (두 번째 파라미터 까지 유효한 표현이다)
, TRUNC(48.674, 2) "COL3" -- 48.67
, TRUNC(48.674, 1) "COL4" -- 48.6
, TRUNC(48.674, 0) "COL5" -- 48
, TRUNC(48.674) "COL6" -- 48 -- 두 번째 파라미터 값이 0일 경우 생략 가능
, TRUNC(48.674, -1) "COL7" -- 40
, TRUNC(68.674, -2) "COL8" -- 0
, TRUNC(48.674, -3) "COL9" -- 0
FROM DUAL;
MOD()
나머지를 반환하는 함수
SELECT MOD(5, 2) "RESULT"
FROM DUAL;
--==>> 1
--> 5를 2로 나눈 나머지 결과값 반환
POWER()
제곱의 결과를 반환하는 함수
SELECT POWER(5, 3) "RESULT"
FROM DUAL;
--==>> 125
-- 5의 3승을 결과값으로 반환
SQRT()
루트 결과값을 반환하는 함수
SELECT SQRT(2) "RESULT"
FROM DUAL;
--==>> 1.41421356237309504880168872420969807857
--> 루트 2에 대한 결과값 반환
LOG()
로그 함수
SELECT LOG(10, 100) "COL1"
, LOG(10, 20) "COL2"
FROM DUAL;
--==>> 2 1.30102999566398119521373889472449302677
삼각함수
SELECT SIN(1), COS(1), TAN(1)
FROM DUAL;
--==>>
/*
0.8414709848078965066525023216302989996233
0.5403023058681397174009366074429766037354
1.55740772465490223050697480745836017308
*/
--> 각각 싸인, 코싸인, 탄젠트 결과값을 반환한다.
삼각함수의 역할수(범위 : -1 ~ 1)
SELECT ASIN(0.5), ACOS(0.5), ATAN(0.5)
FROM DUAL;
--==>> 0.52359877559829887307710723054658381405
-- 1.04719755119659774615421446109316762805
-- 0.4636476090008061162142562314612144020295
--> 각각 어싸인, 어코싸인, 어탄젠트 결과값을 반환한다.
SIGN()
서명, 부호, 특징
--> 연산 결과값이 양수이면 1, 0이면 0, 음수이면 -1을 반환한다.
SELECT SIGN(5-2) "COL1"
, SIGN(5-5) "COL2"
, SIGN(5-8) "COL3"
FROM DUAL;
--==>> 1 0 -1
--> 매출이나 수지와 관련하여 적자 및 흑자의 개념을 나타낼 때 사용된다.
ASCII(), CHR()
→ 서로 대응(상응)하는 함수
SELECT ASCII('A') "COL1"
, CHR(65) "COL2"
FROM DUAL;
--==>> 65 A
--> 『ASCII()』 : 매개변수로 넘겨받은 문자의 아스키코드 값을 반환한다. -- 『CHR()』 : 매개변수로 넘겨받은 아스키코드 값으로 해당 문자를 반환한다.
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
21. 변환 함수 (0) | 2022.03.12 |
---|---|
20. 날짜 연산 함수 (0) | 2022.03.12 |
SQL Developer theme(dracula) 적용 (0) | 2022.03.11 |
18. LPAD(), LTRIM(), TRANSLATE(), REPLACE() (0) | 2022.03.11 |
17. LENGTH(), INSTR(), REVERSE() (0) | 2022.03.10 |
SQL을 공부하면서 SQL Developer을 이용하는데 테마를 변경하고 싶어서 찾아보게되었습니다.
SQL Developer를 닫아야 합니다. SQL Developer가 열려 있는 동안 파일을 수정하면 변경 내용이 저장되지 않는다고 합니다.
아래의 경로로 들어갑니다.
Windows:
%APPDATA%\\SQL Developer\\systemn.n.n.n.n.n\\o.ide.n.n.n.n.n.n.n
Linux or Mac OS X:
~/.sqldeveloper/systemn.n.n.n.n.n/o.ide.n.n.n.n.n.n.n
저는 %appdata%를 검색해서 들어갔습니다.
저의 경로는 아래와 같았습니다.
C:\Users\로그인계정\AppData\Roaming\SQL Developer\system숫자\o.ide.숫자
경로로 들어가면 dtcache.xml이 있습니다.
dtcache.xml 파일 내에서 <schemeMap> 태그를 찾습니다.
아래에 Dracula.xml(각자 원하는 테마) 에 내용을 붙어넣습니다.
저는 dracula 테마를 적용했고 아래에 테마 주소가 있습니다.
(https://github.com/dracula/oracle-sql-developer)
XML이 깨지지 않도록 주의해야 합니다.
Tools(도구) → Preferences(환경설정)에 들어가서
Code Editor(코드편집기) → PL/SQL Synth Colors(구문 색상)에서 설정해주면 됩니다!
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
20. 날짜 연산 함수 (0) | 2022.03.12 |
---|---|
19. 숫자 처리 함수 (0) | 2022.03.12 |
18. LPAD(), LTRIM(), TRANSLATE(), REPLACE() (0) | 2022.03.11 |
17. LENGTH(), INSTR(), REVERSE() (0) | 2022.03.10 |
16. CONCAT(), SUBSTR() (0) | 2022.03.10 |
LPAD()
- Byte 를 확보하여 왼쪽부터 문자로 채우는 기능을 가진 함수
SELECT 'ORACLE' "COL1"
, LPAD('ORACLE', 10. '*') "COL2"
FROM DUAL;
--==>> ORACLE ****ORACLE
1 10Byte 공간을 확보(두 번째 파라미터)
2 확보한 공간에 ’ORACLE’문자열은 담는다(첫 번째 파라미터)
3 남아있는 Byte 공간을 왼쪽부터 세 번째 파라미터 값으로 채운다.
RPAD()
- Byte를 확보하여 오른쪽부터 문자로 채우는 기능을 가진 함수
SELECT 'ORACLE' "COL1"
, RPAD('ORACLE', 10. '*') "COL2"
FROM DUAL;
--==>> ORACLE ORACLE****
LTRIM()
첫 번째 파라미터 값에 해당하는 문자열을 대상으로 왼쪽부터 연속적으로 등장하는 두 번째 파라미터 값에서 지정한 글자와 같은 글자가 등장할 경우 이를 제거한 결과값을 반환한다.
단, 완성형으로 처리되지 않는다.
SELECT 'ORAORAORACLEORACLE' "COL1"
, LTRIM('ORAORAORACLEORACLE', 'ORA') "COL2"
, LTRIM('AAAAAAAAAAAAAAAAORAORAORACLEORACLE', 'ORA') "COL3" -- (앞에 A도 깎음 ORA에 A있으니까)
, LTRIM('ORAoRAORACLEORACLE', 'ORA') "COL4"
, LTRIM('ORAORA ORACLEORACLE', 'ORA') "COL5"
, LTRIM(' ORACLE', ' ') "COL6" -- (이렇게 공백 제거 함수로 많이 쓰임)
, LTRIM(' ORACLE') "COL7" -- (공백의 경우 생략 가능)
FROM DUAL;
--==>>
/*
ORAORAORACLEORACLE
CLEORACLE
CLEORACLE
oRAORACLEORACLE
ORACLEORACLE
ORACLE
ORACLE
*/
RTRIM()
첫 번째 파라미터 값에 해당하는 문자열을 대상으로 오른쪽부터 연속적으로 등장하는 두 번째 파라미터 값에서 지정한 글자와 같은 글자가 등장할 경우 이를 제거한 결과값을 반환한다. 단, 완성형으로 처리되지 않는다.
TRANSLATE()
1:1로 바꿔준다.
SELECT TRANSLATE('MY ORACLE SERVER'
, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
, 'Abcdefghijklmnopqrstuvwxyz') "RESULT"
FROM DUAL;
--==>> my orAcle server
SELECT TRANSLATE('010-4139-4969'
, '0123456789'
, '영일이삼사오육칠팔구') "RESULT"
FROM DUAL;
--==>> 영일영-사일삼구-사구육구
REPLACE()
SELECT REPLACE('MY ORACLE SERVER ORAHOME', 'ORA', '오라') "RESULT"
FROM DUAL;
--==>> MY 오라CLE SERVER 오라HOME
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
19. 숫자 처리 함수 (0) | 2022.03.12 |
---|---|
SQL Developer theme(dracula) 적용 (0) | 2022.03.11 |
17. LENGTH(), INSTR(), REVERSE() (0) | 2022.03.10 |
16. CONCAT(), SUBSTR() (0) | 2022.03.10 |
15. ORDER BY 절 (0) | 2022.03.09 |
LENGTH() 글자 수 / LENGTHB() 바이트 수
SELECT ENAME "COL1"
, LENGTH(ENAME) "COL2"
, LENGTHB(ENAME) "COL3"
FROM EMP;
--==>>
/*
SMITH 5 5
:
FORD 4 4
MILLER 6 6
*/
INSTR()
SELECT 'ORACLE ORAHOME BIORA' "COL1"
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 1, 1) "COL2" --1
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 1, 2) "COL3" --8
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 2, 1) "COL4" --8
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 2) "COL5" --8
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 2, 3) "COL6" --0
, INSTR('ORACLE ORAHOME BIORA', 'ORA', -3) "COL7" --18
, INSTR('ORACLE ORAHOME BIORA', 'ORA', -4) "COL8" --8
, INSTR('ORACLE ORAHOME BIORA', 'ORA', -4, 2) "COL9" --1
FROM DUAL;
- 첫 번째 파라미터 값에 해당하는 문자열(대상 문자열, TARGET)에서
- 두 번째 파라미터 값을 통해 넘겨준 문자열이 등장하는 위치를 찾음
- 세 번째 파라미터 값은 찾기 시작하는 위치(→ 음수의 경우 뒤에서부터 스캔)
- 네 번째 파라미터 값은 몇 번째 등장하는 값을 찾을 것인지에 대한 설정(→ 1은 생략 가능)
REVERSE()
SELECT 'ORACLE' "COL1"
, REVERSE('ORACLE') "COL2"
, REVERSE('오라클') "COL3"
FROM DUAL;
--==>> ORACLE ELCARO ???
- 대상 문자열을 거꾸로 반환(한글은 제외)
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
SQL Developer theme(dracula) 적용 (0) | 2022.03.11 |
---|---|
18. LPAD(), LTRIM(), TRANSLATE(), REPLACE() (0) | 2022.03.11 |
16. CONCAT(), SUBSTR() (0) | 2022.03.10 |
15. ORDER BY 절 (0) | 2022.03.09 |
14. COMMIT / ROLLBACK, DML구문 (0) | 2022.03.07 |
CONCAT()
- 문자열을 결합하는 기능을 가진 함수
- 오로지 2개의 문자열만 결합가능
SELECT ENAME || JOB "COL1"
, CONCAT(ENAME, JOB) "COL2"
FROM EMP;
-- COL1와 COL2 결과 같다
--==>>
/*
SMITHCLERK SMITHCLERK
:
MILLERCLERK MILLERCLERK
*/
SELECT ENAME|| JOB || DEPTNO "COL1"
, CONCAT(CONCAT(ENAME, JOB), DEPTNO) "COL2"
FROM EMP;
/*
SMITHCLERK20 SMITHCLERK20
:
MILLERCLERK10 MILLERCLERK10
*/
- 내부적인 형 변환이 일어나며 결합을 수행함
- CONCAT()은 문자열과 문자열을 결합시켜주는 함수이지만 내부적으로 숫자나 날짜를 문자로 바꾸어주는 과정이 포함되어 있다.
SUBSTR() 추출 갯수 기반 / SUBSTRB() 추출 바이트 기반
SELECT ENAME "COL1"
, SUBSTR(ENAME, 1, 2) "COL2"
FROM EMP;
- 문자열을 추출하는 기능
- 첫 번째 파라미터 값은 대상 문자열(추출 대상, TARGET)
- 두 번째 파라미터 값은 추출을 시작하는 위치(인덱스는 1부터 시작)
- 세 번째 파라미터 값은 추출할 문자열의 갯수(생략 시 끝까지)
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
18. LPAD(), LTRIM(), TRANSLATE(), REPLACE() (0) | 2022.03.11 |
---|---|
17. LENGTH(), INSTR(), REVERSE() (0) | 2022.03.10 |
15. ORDER BY 절 (0) | 2022.03.09 |
14. COMMIT / ROLLBACK, DML구문 (0) | 2022.03.07 |
13. LIKE, %, _ (0) | 2022.03.07 |
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종"
, SAL "급여", SAL*12+NVL(COMM, 0) "연봉"
FROM EMP
ORDER BY DEPTNO ASC; -- DEPTNO -> 정렬 기준
-- ASC -> 정렬 유형 : 오름차순
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종"
, SAL "급여", SAL*12+NVL(COMM, 0) "연봉"
FROM EMP
ORDER BY DEPTNO; -- 오름차순은 생략 가능
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종"
, SAL "급여", SAL*12+NVL(COMM, 0) "연봉"
FROM EMP
ORDER BY DEPTNO DESC; -- DESC -> 정렬 유형 : 내림차순
SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종"
, SAL "급여", SAL*12+NVL(COMM, 0) "연봉"
FROM EMP
ORDER BY 2; -- 부서번호 오름차순
→ EMP 테이블이 갖고 있는 테이블의 고유한 컬럼 순서(2 → ENAME)이 아니라 SELECT 처리되는 두 번째 컬럼(2 → DEPTNO, 부서번호)를 기준으로 정렬된다.
SELECT ENAME, DEPTNO, JOB, SAL
FROM EMP
ORDER BY 2, 3, 4 DESC;
→ 2 : DEPTNO 기준 오름차순
→ 3 : JOB 기준 오름차순
→ 4 DESC : SAL 기준 내림차순
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
17. LENGTH(), INSTR(), REVERSE() (0) | 2022.03.10 |
---|---|
16. CONCAT(), SUBSTR() (0) | 2022.03.10 |
14. COMMIT / ROLLBACK, DML구문 (0) | 2022.03.07 |
13. LIKE, %, _ (0) | 2022.03.07 |
12. 날짜 변환 함수, BETWEEN A AND B (0) | 2022.03.07 |
SELECT *
FROM TBL_DEPT;
--==>>
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
*/
데이터 입력
INSERT INTO TBL_DEPT VALUES(50, '개발부', '서울');
- 이 데이터는 TBL_DEPT 테이블이 저장되어 있는 하드디스크상에 저장된것이 아니라 메모리(RAM) 상에 입력된 것임
- 이를 하드디스크상에 물리적으로 저장하기 위해서는 COMMIT을 수행해야 한다.
커밋
COMMIT;
롤백(ROLLBACK)
ROLLBACK;
- COMMIT을 실행한 이후로 DML 구문(INSERT, UPDATE, DELETE)를 통해 변경된 데이터를 취소할 수 있다.
- DML 구문을 사용한 후 COMMIT 을 하고 나서 ROLLBACK을 실행해봐야 아무 소용 없다.
데이터 수정(UPDATE)
UPDATE TBL_DEPT
SET DNAME = '연구부', LOC = '경기'
WHERE DEPTNO = 50;
데이터 삭제(DELETE)
DELETE TBL_DEPT
WHERE DEPTNO = 50;
-- 이렇게 바로 지우기보다는
-- 아래처럼 확인하고 지우기
SELECT *
FROM TBL_DEPT
WHERE DEPTNO = 50;
DELETE
FROM TBL_DEPT
WHERE DEPTNO = 50;
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
16. CONCAT(), SUBSTR() (0) | 2022.03.10 |
---|---|
15. ORDER BY 절 (0) | 2022.03.09 |
13. LIKE, %, _ (0) | 2022.03.07 |
12. 날짜 변환 함수, BETWEEN A AND B (0) | 2022.03.07 |
11. UPPER(), LOWER(), INITCAP() (0) | 2022.03.07 |
LIKE
SELECT *
FROM TBL_SAWON
WHERE SANAME = '홍길동';
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '홍길동';
둘의 결과는 같음
LIKE와 함께 사용되는 %는 모든 글자 의미
LIKE와 함께 사용되는 _는 한 글자 의미
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '김__';
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '김%';
-- 이 라는 글자가 하나라도 포함되어 있는 항목 조회
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이%';
-- 이 라는 글자가 두 번 들 어있는 항목 조회
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이%이%';
참고로 데이터베이스 설계 과정에서 성과 이름을 분리하여 처리해야할 업무 계획이 있다면 테이블에서 성 컬럼과 이름 컬럼을 분리해서 구성해야 한다
왜냐하면 2글자 성이 존재하기 때문(남궁, 선우)
『99.99%』라는 글자가 포함된 행의 데이터 조회
SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99\\%%' ESCAPE '\\';
- ESCAPE로 정한 문자의 다음 한 글자를 와이들카드에서 탈출시킴
- 일반적으로 사용빈도가 낮은 특수문자를 사용함
부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
15. ORDER BY 절 (0) | 2022.03.09 |
---|---|
14. COMMIT / ROLLBACK, DML구문 (0) | 2022.03.07 |
12. 날짜 변환 함수, BETWEEN A AND B (0) | 2022.03.07 |
11. UPPER(), LOWER(), INITCAP() (0) | 2022.03.07 |
10. NVL, COALESCE, 컬럼연결(결합) (0) | 2022.03.06 |