[SQL] String , Date 관련 함수 정리

diveintoo·2024년 8월 3일
0

SQL 정리

목록 보기
1/1

STRING 조작

문자열 검색

  • 특정 문자열 포함 검색 LIKE
    • 필드명 LIKE '%검색어%’ → ‘검색어’를 포함하는 데이터 검색
    • 옵션
      • ‘검색어’로 시작하는 데이터 검색 → 필드명 LIKE '검색어%’
      • ‘검색어’로 끝나는 데이터 검색 → 필드명 LIKE '%검색어’
      • 자릿수를 정하고 싶다면 ‘_’를 사용한다.
      • ‘_’ 자체를 찾고싶다면 앞에 ‘\’(escape)를 붙인다.
  • 복잡한 패턴 검색 REGEXP
    • 필드명 regexp "패턴"
    • 약속
      • 문자열 그대로 입력 : 작성한 패턴을 포함한 문자열 추출
      • |로 구분된 패턴 : | 로 구분된 패턴 중 하나라도 해당하는 문자열 추출
      • 문자 그룹 []
        • 추출할 문자가 불연속적인 경우
          • l, s, k를 포함한 문자 추출 : [lsk]
        • 대시(-)로 문자 범위 나타내기
          • 소문자 : [a-z]
          • 대문자 : [A-Z]
          • 숫자 : [0-9]
          • 한글 : [가-힣]
      • 패턴 반복
          • : 패턴을 0회 이상 포함
          • : 패턴을 1회 이상 포함
        • {n, m} : 패턴을 n회 이상, m회 이하 반복
        • ? : 패턴을 0회 또는 1회 포함
      • 패턴 위치
        • ^ : 맨 앞
        • $ : 맨 뒤
        • . : 하나의 문자가 존재함
    • 예시
      • name에 s나 u가 2번 이상 3번 이하 반복되는 데이터 추출 ~ where name regexp “[su]{2,3}”
      • name에 ‘su’로 시작하고 끝나는 데이터 추출 ~ where name regexp “^[su].*[su]$”
      • name에 ‘su’로 끝나지 않는 데이터 추출 ~ where name not regexp “.*[su]$”

문자열 합치기

  • 기본 합치기
    • CONCAT(문자열1, 문자열2 [, 문자열3 ...])
    • SELECT CONCAT('안녕 ', 23, '인'); >> 안녕 23인
    • 다른 데이터 타입도 문제 없이 합친다. NULL 제외!
  • GROUP BY로 문자열을 합칠 때
    • GROUP_CONCAT(필드명)

    • 예시) color가 같은 번호들을 모아서 ,로 구분하여 출력한다. (번호의 중복 제거, 번호 내림차순 정렬)

      SELECT
      	color,
      	GROUP_CONCAT(DISTINCT number ORDER BY number DESC SEPARATOR ', ') AS '번호'
      FROM colors
      GROUP BY color;
    • 옵션

      • 구분자 : 필드명 SEPARATOR 구분자
      • 중복 제거 : DISTICT 필드명
      • 정렬 : 필드명 ORDER BY 필드명

문자열 추출하기

  • SUBSTR(str, pos, len)
    • str - 원본 문자열, pos - 읽기 시작 위치(1부터 시작), len - 읽어올 길이
    • SELECT SUBSTR(’안녕하세요’, 2); >> 녕하세요
    • SELECT SUBSTR(’안녕하세요’, 2, 2); >> 녕하
    • SELECT SUBSTR(’안녕하세요’, **-3**, 2); >> 하세

DATE 조작

두 날짜 간 차이 구하기

  • DAY만 구해도 된다면
    • DATEDIFF(날짜1, 날짜2)
    • 날짜1 - 날짜2 <최근일수록 큰 날짜!>
    • SELECT DATEDIFF('2024-07-27', '2024-01-20'); >> 189
    • 대여기간 같은 경우에는 DATEDIFF 후 1을 더해야한다!
  • YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 등의 차이를 구하고 싶다면
    • TIMESTAMPDIFF(단위, 날짜1, 날짜2)
    • 날짜2 - 날짜1
    • SELECT TIMESTAMPDIFF(**MONTH**, '2024-02-01', '2024-07-27'); >> 5

날짜 형식 지정하기

  • DATE_FORMAT(날짜, 형식)
    • DATE_FORMAT('2023-09-21 10:22:40', '%Y-%m-%d') >> 2023-09-21
    • 형식
      • %Y - 4자리 연도
      • %y - 2자리 연도
      • %m - 2자리 월
      • %d - 2자리 일
      • %H - 2자리 시간(24시간)
      • %i - 2자리 분
      • %S - 2자리 초

날짜에서 특정 부분 추출

  • MONTH(날짜)
    • YEAR, DAY, HOUR, MINUTE, SECOND 모두 가능
    • SELECT MONTH(‘2024-02-27’); >> 2

0개의 댓글