sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mariadb
  • spring boot
  • 알고리즘
  • JPA
  • java
  • 티스토리챌린지
  • 프로그래머스
  • 레벨3
  • Android Studio
  • 연습문제
  • docker
  • 백준
  • 오블완
  • 고득점KIT
  • kotlin
  • 고득점 Kit
  • 레벨2
  • DB
  • nginx
  • 안드로이드 스튜디오

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

DB/MariaDB

[MariaDB] csv 형태로 저장된 필드를 조회하고 싶다면 사용하는 내장함수 FIND_IN_SET

2023. 5. 15. 00:21
728x90

발단

외래키로 존재하는 값이 달라지지 않는다고 가정하고, 우리는 DB 를 설계할 때 종종 조회를 위해 외래키를 csv 형태로 가지는 field 를 설계한다. 이런 상황에서 조회할 때 사용하면 좋은 내장함수를 발견하게 되었다.

 

설명

  • 만약 csv 형태로 값을 저장하는게 아니라면 field 에 특정구조를 가지게 한다.
    • 예를들면 prefix, suffix 로 `|` 를 사용하는 것이다. 1,2,3 -> |1|2|3| 으로 저장하여 3을 조회하고 싶을 때 |3| 을 조회하면 된다.
  • 위와 같은 구조도 상황에 따라서 사용하면 되지만, 처음에 csv 형태로 값을 저장하기로 하였기에 구조를 변경하고 싶지 않았다. 
  • 따라서, FIND_IN_SET 을 통해 문제를 해결하였다.

 

해결

  • FIND_IN_SET 은 두개의 파라미터를 받는다.
    • 첫번째 파라미터는 `패턴`으로 찾으려는 값이다.
    • 두번째 파라미터는 `strlist`으로 타겟이 되는 csv 형태의 값이다.
  • `strlist` 에 해당되는 속하는 값중 하나를 `패턴`에 넣게되면 position 을 응답하게 된다.(position 은 `index + 1` 이다.)

 

코드

-- 기본적인 예제이다.
SELECT FIND_IN_SET('1', '1,2,3')

-> 1

---------------------------------------------

-- 아래처럼 서브쿼리로 사용할 수 있다.
SELECT FIND_IN_SET('1',
	(
	SELECT something_csv FROM atsky
	)
)

---------------------------------------------

-- 아래처럼 조건문으로 처리할 수 있다.
SELECT * FROM atsky
WHERE 0 < FIND_IN_SET('1', something_csv)

 

 

특이사항

  • 만약 첫번째 파라미터가 두번째 파라미터에 포함되지 않거나, 두번째 파라미터가 empty string 이라면 0을 반환한다.
  • 파라미터중 하나라도 null 이면 null 을 반환한다.
  • 만약 첫번째 파라미터가 `,` 을 포함하고 있다면 정확한 값을 반환하지 않는다.

 

출처

 

FIND_IN_SET

Returns the position of a string in a set of strings.

mariadb.com

 

728x90

'DB > MariaDB' 카테고리의 다른 글

[MariaDB] TIME_TO_SEC 내장함수를 사용해서 TIME 형식의 string 값을 초로 변경해보자  (0) 2023.05.16
[MariaDB] STR_TO_DATE 내장함수를 사용해서 string 을 DATETIME 으로 변환하자.(feat. 사용예시)  (0) 2023.05.16
    'DB/MariaDB' 카테고리의 다른 글
    • [MariaDB] TIME_TO_SEC 내장함수를 사용해서 TIME 형식의 string 값을 초로 변경해보자
    • [MariaDB] STR_TO_DATE 내장함수를 사용해서 string 을 DATETIME 으로 변환하자.(feat. 사용예시)
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바