SQL 기본 문법 SELECT - 문자함수, 숫자함수, 날짜함수, 변환함수, NULL관련함수, CASE

yy·2024년 3월 27일
0

잡동산이

목록 보기
15/21

1️⃣ 문자함수

1. CHR(ASCII코드)

  • ASCII코드를 인수로 입력 시 매핑되는 문자가 무엇인지 알려주는 함수
SELECT CHR(65) FROM DUAL;
-> A

2. LOWER(문자열)

  • 문자열을 소문자로 변경

3. UPPER(문자열)

  • 문자열을 대문자로 변경
SELECT LOWER('JENNIE') FROM DUAL;
-> jennie

SELECT UPPER('jennie') FROM DUAL;
-> JENNIE

4. LTRIM(문자열[,특정문자]) *[]는 옵션

  • 문자열의 왼쪽 공백 제거. 특정문자를 제시할 경우 왼쪽부터 확인하여 문자열에 있으면 제거.
SELECT LTRIM('    JENNIE') FROM DUAL;
-> JENNIE

SELECT LTRIM('블랙핑크', '블랙') FROM DUAL;
-> 핑크

5. RTRIM(문자열[,특정문자]) *[]는 옵션

  • 문자열의 오른쪽 공백 제거. 특정문자를 제시할 경우 오른쪽부터 확인하여 문자열에 있으면 제거.
SELECT RTRIM('JENNIE    ') FROM DUAL;
-> JENNIE

SELECT RTRIM('블랙핑크', '핑크') FROM DUAL;
-> 블랙

6. TRIM([위치][특정문자][FROM]문자열) *[]는 옵션

  • 옵션이 하나도 없을 경우 : 문자열의 왼쪽, 오른쪽 공백 제거
  • 옵션이 있을 경우 : 문자열을 위치로 지정된 곳부터 한 글자씩 특정 문자와 비교해 같으면 제거OR 같지 않으면 멈춤.
  • 위치 옵션 : LEADING, TRAILING, BOTH
  • LTRIM, RTRIM과는 달리 특정문자는 한 글자만 지정 가능.
SELECT ('  JENNIE   ') FROM DUAL;
-> JENNIE

SELECT (LEDING '블' FROM '블랙핑크') FROM DUAL;
-> 랙핑크

SELECT (TRAILING '크' FROM '블랙핑크') FROM DUAL;
-> 블랙핑

7. SUBSTR(문자열, 시작점 [,길이]) *[]는 옵션

  • 문자열 원하는 부분만 잘라서 반환.
  • 길이 명시 x : 문자열의 시작점(1부터 시작)부터 끝까지 반환.
SELECT SUBSTR('블랙핑크제니', 3, 2) FROM DUAL;
-> 핑크

SELECT SUBSTR('블랙핑크제니', 3, 4) FROM DUAL;
-> 핑크제니

8. LENGTH(문자열)

  • 문자열 길이 반환.
SELECT LENGTH('JENNIE') FROM DUAL;
-> 6

9. REPLACE(문자열, 변경 전 문자열 [, 변경 후 문자열]) *[]는 옵션

  • 문자열에서 '변경 전 문자열'을 '변경 후 문자열'로 변경 후 반환.
  • '변경 후 문자열' 없으면 '변경 전 문자열' 제거 후 반환.
SELECT REPLACE ('블랙핑크제니', '제니', '지수') FROM DUAL;
-> 블랙핑크지수

SELECT REPLACE ('블랙핑크제니', '제니') FROM DUAL;
-> 블랙핑크


2️⃣숫자함수

1. ABS(수)

  • 수의 절대값 반환.
SELECT ABS(-1) FROM DUAL;
->1

2. SIGN(수)

  • 수의 부호 반환.
  • 양수 : 1, 음수: -1, 0: 0 반환.
SELECT SIGN(-7) FROM DUAL;
-> -1

SELECT SIGN(7) FROM DUAL;
-> 1

3. ROUND(수 [,자릿수]) *[]는 옵션

  • 수를 지정된 소수점 자릿수까지 반올림하여 반환.
SELECT ROUND(163.76, ,1) FROM DUAL;
-> 163.8

4. TRUNC(수 [,자릿수]) *[]는 옵션

  • 수를 지정된 소수점 자릿수까지 버림 후 반환.
  • 자릿수 x : 기본 값 0. 버림된 정수로 반환. 음수의 경우 지정된 정수부에서 버림하여 반환.
SELECT TRUNC(54.29, 1) FROM DUAL;
-> 54.2

SELECT TRUNC(54.29, -1) FROM DUAL;
-> 50

5. CEIL(수)

  • 소수점 이하의 수 올림하여 정수 반환.
SELECT CEIL(72.86) FROM DUAL;
-> 72.86

SELECT CEIL(-33.4) FROM DUAL;
-> -33

6. FLOOR(수)

  • 소수점 이하의 수를 버림 후 정수 반환.
SELECT FLOOR(22.3) FROM DUAL;
-> 22

SELECT FLOOR(-22.3) FROM DUAL;
-> -23

7. MOD(수1, 수2)

  • 수1을 수2로 나눈 나머지를 반환.
  • 수2가 0 : 첫 번째 인자값이 결과로 도출.
  • 수1, 수2가 음수 : 나머지도 음수
SELECT MOD(15,7) FROM DUAL;
-> 1

SELECT MOD(15,-4) FROM DUAL;
-> 3


3️⃣날짜함수

1. SYSDATE

  • 현재의 연, 월, 일, 시, 분, 초를 반환.
SELECT SYSDATE FROM DUAL;
-> 2024-03-27 17:00:00

2. EXTRACT(특정 단위 FROM 날짜 데이터)

  • 날짜 데이터에서 특정 단위(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)만 출력 후 반환.
SELECT EXTRACT(YEAR FROM SYSDATE) AS YEAR,
	   EXTRACT(MONTH FROM SYSDATE) AS MONTH,
       EXTRACT(DAY FROM SYSDATE) AS DAY
       FROM DUAL;
-> 
YEAR | MONTH | DAY
2024 |  03   | 27

3. ADD_MONTHS(날짜 데이터, 특정 개월 수)

  • 날짜 데이터에서 특정 개월 수를 더한 날짜 반환.
  • 날짜의 이전 달이나 다음 달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자 반환.
SELECT ADD_MONTHS(TO_DATE('2021-12-31','YYYY-MM-DD'), -1) AS PREV_MOTH
	   ADD_MONTHS(TO_DATE('2021-12-31','YYYY-MM-DD'), 1) AS NEXT_MOTH
       FROM DUAL;
->       PREV_MONTH    |      NEXT_MONTH
   2021-11-30 00:00:00 | 2022-01-31 00:00:00


4️⃣ 변환함수

1. 명시적 형변환, 암시적 형변환

  • 명시적 형변환 : 변환 함수 사용 → 데이터 유형 변환.
  • 암시적 형변환 : DB가 내부적으로 알아서 데이터 유형 변환.

가능한 명시적 형변환하여 사용하도록 하는 것이 성능저하 및 에러발생에 대비할 수 있음.


2. 명시적 형변환 함수

2-1. TO_NUMBER(문자열)

  • 문자열 -> 숫자.
SELECT TO_NUMBER('123') FROM DUAL;
-> 123

2-2. TO_CHAR(수 OR 날짜 [, 포맷]) *[]는 옵션

  • 수나 날짜형의 데이터 -> 문자형.
SELECT TO_CHAR(123) FROM DUAL;
-> '123'

2-3. TO_DATE(문자열, 포맷)

  • 포맷 형식의 문자열 -> 날짜형.
SELECT TO_DATE('20240327', 'YYYYMMDD') FROM DUAL;
-> 2024-03-27


5️⃣ NULL 관련 함수

1. NVL(인수1, 인수2)

  • 인수 1의 값이 NULL인 경우 : 인수 2반환
  • 인수 1의 값이 NULL 아닌 경우 : 인수 1반환
SELECT MEMBER_NO,
	   NVL(REVIEW_SCORE, 0) AS REVIEW_SCORE
  FROM REVIEW;
-> REVIEW_SCORE가 NULL이면 0으로 반환 / NULL이 아니면 REVIEW_SCORE 반환

2. NULLIF(인수1, 인수2)

  • 인수 1 = 인수 2 의 경우 : NULL 반환
  • 인수 1 ≠ 인수 2 의 경우 : 인수 1 반환
SELECT MEMBER_NO,
	   NVL(REVIEW_SCORE, 0) AS REVIEW_SCORE,
       REVIEW
  FROM REVIEW;
 WHERE PRODUCT_ID = '100001';
-> REVIEW_SCORE 데이터가 0일 경우 NULL 반환, 아니면 REVIEW_SCORE 데이터 반환.

3. COALESCE(인수1, 인수2, 인수3 ...)

  • NULL이 아닌 최초의 인수 반환.

    SELECT NAME,
    		COALESCE(PHONE, EMAIL, FAX) AS CONTACT
      FROM MEMBERINFO;
    -> NULL이면 PHONE, EMAIL, FAX 중 NULL이 아닌 것 중 순서대로 적힌 것 중 최초 인수 반환.


6️⃣ CASE

  • '~이면 ~이고, ~이면 ~이고, ...' 이런 구문 형식.
  • 같은 기능 : ORACLE의 DECODE 함수가 있음.
CASE WHEN SUBWAY_LINE='1' THEN 'BLUE'
	 WHEN SUBWAY_LINE='2' THEN 'GREEN'
     WHEN SUBWAY_LINE='3' THEN 'ORANGE'
     [ELSE 'GREY']
END

=

CASE SUBWAY_LINE
	 WHEN '1' THEN 'BLUE'
     WHEN '2' THEN 'GREEN'
     WHEN '3' THEN 'ORANGE'
     [ELSE 'GREY']
END

=

DECODE(SUBWAY_LINE,'1','BLUE','2','GREEN','3','ORANGE'[,'GREY']) 
profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글