학원/DB(오라클),SQL문

10/20 25-3 오라클 주요 내장 함수 (문자열 관련)

도원결의 2022. 10. 20. 18:15

자바에서 주요 메소드 정리한 것 처럼 오라클도 내장함수를 정리할거

윽 내 내장..... 에 그 내장 아님...     아... 수업시간에 내장드립 엄청 치고싶었는데.... 속으로 열심히 드립치고 놀았음 후후후

 

[문자관련 함수들]

-NVL(컬럼명,NULL인 경우 대체할 값)  : 해당 컬럼에서 null 인 값이 있으면 대체할 값으로 변경 

-NVL2(컬럼명,"대체값1(NULL 아닐때)","대체값2(NULL일때)")  :위에거랑 비슷한데 null이 아닐 때도 변경함

-LOWER('문자열'):영문자를 소문자로 변환  
                   SELECT LOWER('ORACLE') FROM DUAL ;
-UPPER('문자열'):영문자를 대문자로 변환  
                   SELECT UPPER('oracle') FROM DUAL ;

-INITCAP('문자열'): 첫 영문자를 대문자로 변환
                  SELECT INITCAP('oracle') FROM DUAL;
-CONCAT('문자열','문자열'):문자열 연결  근데 이거보다 그냥 || 씀 왜냐면 이건 2 연결할 때만 쓸 수 있음.
         

 

-LENGTH():문자열 길이반환 이건 자바랑 똑같넹
                    SELECT LENGTH('오라클') FROM DUAL;   => 3출력
-lengthb():문자열 길이를 바이트로  (한글은 3바이트 차지)
                     SELECT LENGTHB('오라클') FROM DUAL;   =>9출력

-LPAD('문자열', 전체 자리수 ,'채울 문자열') : 좌측을 지정한 값으로 채운다

                    SELECT LPAD('HELLO',10,'X') FROM DUAL => XXXXXHELLO
                    SELECT LPAD('9',2,'0') FROM DUAL =>09

-RPAD('문자열', 전체 자리수 ,'채울 문자열'):우측을 지정한 값으로 채운다

                    SELECT LPAD('HELLO',10,'X') FROM DUAL+>HELLOXXXXX
                    SELECT LPAD('9',2,'0') FROM DUAL +>90

------- LPAD랑 RPAD는 단독으로 쓰이기 보단 정보 숨기는기능으로 다른 함수랑 엮어서 많이 사용한다!!!!

         그리고 헷깔리지 않게 잘 이해해!! (  건더기,  총 그릇  , 국물    ) == 미역국  요런 비유??

-SUBSTR('문자열',시작인덱스,길이):문자열에서 시작인덱스부터 길이 만큼 가져옴,인덱스는 1부터 시작
                    SELECT SUBSTR('123456789',3,3) FROM DUAL;   =>345

 SUBSTR 랑 RPAD랑 아주 많이 쓰임 잘 익혀야 한다!! 걍 아주 외울정도로 달달달달다달다달달달!!

-INSTR('문자열','찾을 문자열'): 찾은 문자열의 인덱스 반환. 인덱스는 1부터 시작, 자바의 INDEXOF 랑 같음

                    찾는 문자열 없으면 0 반환 
             SELECT INSTR('ABCDEFG','DE') FROM DUAL    =>4
(1)SELECT * FROM DEPT WHERE instr(LOWER(DNAME),'e') !=0 는
(2)SELECT * FROM DEPT WHERE LOWER(DNAME) like '%e%'와 결과가 같으나 쿼리속도면에서 (1)이 훨씬 성능이 우수하다.

그림에서 마지막꺼 추가설명

   WHERE SUBSTR(UPPER(LSAT_NAME),LENGTH(LAST_NAME),1)='T'

      ( '가져올 문자열'  중에서 , 문자열이 총 길이 =마지막글자 인덱스번호 , 그 마지막글자 하나만!)  이거군

-REPLACE('문자열','바꿀 문자열','바뀔 문자열'): 특정 문자열을 다른 문자열로 대체
                SELECT REPLACE('HELLO WORLD','HELLO','JAVA') FROM DUAL =>JAVA WORLD

-TO_CHAR():  = TOSTRING 과 같은의미 숫자형을 문자형으로 변환 !!!
     TO_CHAR(숫자 혹은 날짜)
     TO_CHAR(숫자 혹은 날짜,숫자형식 포맷 문자열 혹은 날짜형식 포맷 문자열)

 

SELECT TO_CHAR(123,'0999') FROM DUAL =>0123    => 자리수 맞출 때 주로 사용
SELECT TO_CHAR(123,'9999') FROM DUAL => 123   => '9999' 9면 여백을 주고, '0999' 0이면 앞에 0을 반환 하는 군
SELECT TO_CHAR(1234,'$999,999.99') FROM DUAL  =>  $1,234.00      $앞에다가 여백을 줌
SELECT TO_CHAR(1234,'$999,999.00') FROM DUAL =>  $1,234.00   소수점은 값이 없으면 0이나 9나 다 0으로 출력됨
SELECT TO_CHAR(1234,'L999,999') FROM DUAL => \1,234
SELECT TO_CHAR(1234,'l999,999') FROM DUAL => \1,234
            ---숫자가 너무 크면 #처리로 해버림

-날짜형을 문자 형으로 변환  (필요한것만 )
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM DUAL
           ******yyyy"월"mm"년"dd"일" :한글로 년월일 표시시 포맷형식에 ""로 한글을 감싼다.
예]SELECT TO_CHAR(SYSDATE,'YYYY"년"MM"월"DD"일" HH"시"MI"분"SS"초"') FROM DUAL

SELECT TO_CHAR(SYSDATE,'day') FROM DUAL  =>목요일
SELECT TO_CHAR(SYSDATE,'dy') FROM DUAL  =>목

SELECT TO_CHAR(SYSDATE,'HH AM') FROM DUAL=> 06 오전 혹은 오후
SELECT TO_CHAR(SYSDATE,'HH PM') FROM DUAL=> 06 오전 혹은 오후      AM/PM 둘 중 아무거나 써도 됨

SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL=>0~23시 형태의 시간 반환

SELECT TO_CHAR(TO_DATE('2013/1/1'),'DDD') FROM DUAL=>001   해당년도 1월1일부터 며칠 째인지 반환

-TO_NUMBER( ):문자형을 숫자형으로 변환
              SELECT TO_NUMBER('123') + TO_NUMBER('456') FROM DUAL +>579
              혹은  SELECT '123' + '456' FROM DUAL
-TRIM( ):양쪽 공백 제거