본문 바로가기
  • 문과생의 백엔드 개발자 성장기
|Project

210521_work shop (2-1) . SQL

by 케리's 2021. 5. 23.

함수 QUESTION

 

 

✔ 사원 테이블에서 사원이름을 첫글자는 대문자로, 나머지는 소문자로 출력하라
  

SELECT INITCAP(ENAME)

FROM EMP;

 : 첫 번째 문자만 대문자로 변환할 때 사용

 

SQL> SELECT INITCAP(ENAME)
  2  FROM EMP;

INITCAP(ENAME)
--------------------
Smith
Allen
Ward
Jones
Martin
Blake
Clark
King
Turner
James
Ford

INITCAP(ENAME)
--------------------
Miller

12 rows selected.




✔ 사원테이블에서 사원이름을 뽑고 또 이름의 두번째 글자부터 네번째 글자까지 출력하라.


SELECT ENAME, SUBSTR (ENAME, 2, 4)
FROM EMP;

 : 문자열을 자를때 사용 (2번째 부터 4번째)

 

SQL> SELECT ENAME, SUBSTR(ENAME, 2, 4)
  2  FROM EMP;

ENAME                SUBSTR(ENAME,2,4)
-------------------- --------------------------------
SMITH                MITH
ALLEN                LLEN
WARD                 ARD
JONES                ONES
MARTIN               ARTI
BLAKE                LAKE
CLARK                LARK
KING                 ING
TURNER               URNE
JAMES                AMES
FORD                 ORD

ENAME                SUBSTR(ENAME,2,4)
-------------------- --------------------------------
MILLER               ILLE

12 rows selected.

 


✔ 사원테이블의 사원 이름의 철자 개수를 출력하라.


SELECT ENAME, LENGTH (ENAME)
FROM EMP;

: 문자열의 길이를 출력할 때 사용

 

SQL> SELECT ENAME, LENGTH (ENAME)
  2  FROM EMP;

ENAME                LENGTH(ENAME)
-------------------- -------------
SMITH                            5
ALLEN                            5
WARD                             4
JONES                            5
MARTIN                           6
BLAKE                            5
CLARK                            5
KING                             4
TURNER                           6
JAMES                            5
FORD                             4

ENAME                LENGTH(ENAME)
-------------------- -------------
MILLER                           6

12 rows selected.



✔ 사원테이블에서 사원이름의 앞 글자 하나와 마지막 글자 하나만 출력하되 모두 소문자로 각각 출력하라.

 

SELECT LOWER (SUBSTR (ENAME, 1, 1)), LOWER (SUBSTR (ENAME, -1, 1))
FROM EMP;
 : 소문자로 변환할때 사용 

 

SQL> SELECT LOWER (SUBSTR (ENAME, 1, 1)), LOWER (SUBSTR(ENAME, -1, 1))
  2  FROM EMP;

LOWER(SU LOWER(SU
-------- --------
s        h
a        n
w        d
j        s
m        n
b        e
c        k
k        g
t        r
j        s
f        d

LOWER(SU LOWER(SU
-------- --------
m        r

12 rows selected.

 


✔ 3456.78의 소수점 첫번째 자리에서 반올림하라.


SELECT ROUND (3456.78, 1)
FROM DUAL;

 : 반올림 할 때 사용 (1번째 자리에서)

 

SQL> SELECT ROUND(3456.78 ,1)
  2  FROM DUAL;

ROUND(3456.78,1)
----------------
          3456.8

 

 

✔ 3의 4제곱을 구하고, 64의 제곱근을 구하라.

 

SELECT POWER(3, 4), SQRT(64)
FROM DUAL;

 : POWER 는 제곱을 구할 때, SQRT 는 제곱근을 구할 때 사용

 

SQL> SELECT POWER(3, 4), SQRT(64)
  2  FROM DUAL;

POWER(3,4)   SQRT(64)
---------- ----------
        81          8

 


✔오늘날짜와 오늘날짜에서 10일을 더한 날짜를 출력하라.

 

SELECT SYSDATE, SYSDATE+10
FROM DUAL;
 : SYSDATE (오늘날짜), +1을 하면 1일 이후 출력

 

SQL> SELECT SYSDATE, SYSDATE + 10
  2  FROM DUAL;

SYSDATE  SYSDATE+
-------- --------
21/05/23 21/06/02


✔ 현재 날짜보다 세달 후는  언제인지 를 출력하라.


 SELECT SYSDATE, ADD_MONTHS (SYSDATE, 3)
 FROM DUAL;
  : ADD_MONTH 는 개월수 더하기

 

SQL> SELECT SYSDATE, ADD_MONTHS (SYSDATE, 3)
  2  FROM DUAL;

SYSDATE  ADD_MONT
-------- --------
21/05/23 21/08/23



✔ 사원테이블에서 사원이름과 사원들의 오늘 날짜까지의 근무일수를 구하라.


SELECT ENAME, SYSDATE - HIREDATE
FROM EMP;

 : TRUNC 를 사용하면 더 보기 쉽게 구할 수 있다. 

 

SQL> SELECT ENAME, TRUNC(SYSDATE - HIREDATE)
  2  FROM EMP;

ENAME                TRUNC(SYSDATE-HIREDATE)
-------------------- -----------------------
SMITH                                  14767
ALLEN                                  14702
WARD                                   14700
JONES                                  14661
MARTIN                                 14482
BLAKE                                  14632
CLARK                                  14593
KING                                   14432
TURNER                                 14502
JAMES                                  14416
FORD                                   14416

ENAME                TRUNC(SYSDATE-HIREDATE)
-------------------- -----------------------
MILLER                                 14365

12 rows selected.



✔ 위 문제에서 근무일수를 00년 00개월 00일 근무하였는지 확인할 수 있도록 변환하라.

(단, 한 달을 30일로 계산하라)


ex)
 | ENAME | 근무일수 |
 | KING | 00년 00개월 00일 |

SELECT ENAME, (TRUNC (MONTHS_BETWEEN (SYSDATE,HIREDATE)/12))
|| '년'
|| MOD (TRUNC (MONTHS_BETWEEN (SYSDATE,HIREDATE)),12)
|| '개월'
|| TRUNC (SYSDATE - (ADD_MONTHS (HIREDATE, TRUNC (MONTHS_BETWEEN (SYSDATE, HIREDATE)))))
|| '일'
AS 근무일수
FROM EMP;

SQL> SELECT ENAME, (TRUNC (MONTHS_BETWEEN (SYSDATE,HIREDATE)/12))
  2  || '년'
  3  || MOD (TRUNC (MONTHS_BETWEEN (SYSDATE,HIREDATE)), 12)
  4  || '개월'
  5  || TRUNC (SYSDATE -(ADD_MONTHS (HIREDATE, TRUNC(MONTHS_BETWEEN (SYSDATE, HIREDATE)))))
  6  || '일'
  7  AS 근무일수
  8  FROM EMP;

ENAME
--------------------
근무일수
--------------------------------------------------------------------------------
SMITH
40년5개월6일

ALLEN
40년3개월3일

WARD
40년3개월1일


ENAME
--------------------
근무일수
--------------------------------------------------------------------------------
JONES
40년1개월21일

MARTIN
39년7개월25일

BLAKE
40년0개월22일


ENAME
--------------------
근무일수
--------------------------------------------------------------------------------
CLARK
39년11개월14일

KING
39년6개월6일

TURNER
39년8개월15일


ENAME
--------------------
근무일수
--------------------------------------------------------------------------------
JAMES
39년5개월20일

FORD
39년5개월20일

MILLER
39년4개월0일


12 rows selected.



✔ 사원테이블에서 사원의 이름 30자 확보 한 다음  출력하고  오른쪽에 #을 채워라

 

SELECT ENAME, RPAD (ENAME, 30, '#')
FROM EMP;

 : 지정한 길이 만큼 오른쪽부터 특정문자로 채울 때 사용  

 

SQL> SELECT ENAME, RPAD (ENAME, 30, '#')
  2  FROM EMP;

ENAME
--------------------
RPAD(ENAME,30,'#')
--------------------------------------------------------------------------------
SMITH
SMITH#########################

ALLEN
ALLEN#########################

WARD
WARD##########################


ENAME
--------------------
RPAD(ENAME,30,'#')
--------------------------------------------------------------------------------
JONES
JONES#########################

MARTIN
MARTIN########################

BLAKE
BLAKE#########################


ENAME
--------------------
RPAD(ENAME,30,'#')
--------------------------------------------------------------------------------
CLARK
CLARK#########################

KING
KING##########################

TURNER
TURNER########################


ENAME
--------------------
RPAD(ENAME,30,'#')
--------------------------------------------------------------------------------
JAMES
JAMES#########################

FORD
FORD##########################

MILLER
MILLER########################


12 rows selected.

 


    
✔ 사원테이블에서 이름의 공백을 없앤 후 출력하라

 

SELECT ENAME, TRIM (ENAME)
FROM EMP;

 : 문자열의 시작과 끝에서 공백 문자를 제거

 

SQL> SELECT ENAME, TRIM (ENAME)
  2  FROM EMP;

ENAME                TRIM(ENAME)
-------------------- --------------------
SMITH                SMITH
ALLEN                ALLEN
WARD                 WARD
JONES                JONES
MARTIN               MARTIN
BLAKE                BLAKE
CLARK                CLARK
KING                 KING
TURNER               TURNER
JAMES                JAMES
FORD                 FORD

ENAME                TRIM(ENAME)
-------------------- --------------------
MILLER               MILLER

12 rows selected.



      
✔ 사원테이블에서 입사년도와 일만 출력하자. 

 

SELECT EXTRACT (YEAR FROM HIREDATE) "HIRE YEAR",
EXTRACT (DAY FROM HIREDATE) " HIRE DAY"
FROM EMP;

 : 날짜 함수에서 특정 날짜/시간 값이나 날짜 값을 가진 표현식으로부터 원하는 날짜 영역을 추출하여 출력

 

SQL> SELECT EXTRACT (YEAR FROM HIREDATE) "HIRE YEAR",
  2  EXTRACT (DAY FROM HIREDATE) " HIRE DAY"
  3  FROM EMP;

 HIRE YEAR   HIRE DAY
---------- ----------
      1980         17
      1981         20
      1981         22
      1981          2
      1981         28
      1981          1
      1981          9
      1981         17
      1981          8
      1981          3
      1981          3

 HIRE YEAR   HIRE DAY
---------- ----------
      1982         23

12 rows selected.


     

'|Project' 카테고리의 다른 글

PJT2_DB_cx_Oracle  (0) 2021.08.23
210521_work shop (2-2) . SQL  (0) 2021.05.23
210517_work shop (1) . PYTHON/웹 크롤링  (0) 2021.05.18
PJT1_Web_Crawling  (0) 2021.05.12

댓글