TIL, WIL/TIL๐
10.21 TIL : SQL ํํฐ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์
wannaDevelopIt
2025. 10. 22. 06:51
DB์์ varchar๋ก ์ ์ฅ๋ json String์ ๋ํด ํ๊ธ์ธ ๊ฒฝ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด์ผ ํ๋ค. ๋ค๋ง, ํ๊ธ์ด์ด๋ ์๊ด์๋ ํค์ ํ๊ธ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ด ์์ฌ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์ ์ธํ๋ ๊ฒ์ด ์ค์ํ๋ค
์์ฑ๋ ์ฟผ๋ฆฌ :
WITH W1 AS (
-- 1. ๋ณธ ํ
์ด๋ธ์์ ํ๊ธ์ด ํฌํจ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํ
SELECT
sequence,
content
FROM
board b
WHERE
b.content RLIKE '[๊ฐ-ํฃ]'
),
W2 AS (
SELECT
sequence,
REGEXP_SUBSTR(
b.content
-- ํจํด: "key":" ๋ค์ ์ค๋ฉฐ, ํ๊ธ์ ํฌํจํ๊ณ , ๋ซ๋ ๋ฐ์ดํ ์ง์ ๊น์ง์ ๋ด์ฉ์ ์บก์ฒ
'(?<="key":")([^"]*[๊ฐ-ํฃ]+[^"]*)'
) AS Extracted_Korean_Content,
b.content
FROM
board b
WHERE
-- content์ "key" ์์ฑ ๊ฐ ์ค ํ๊ธ์ด ํฌํจ๋ ๋ธ๋ก์ด ์๋ ํ์ ์กฐํ
b.content NOT REGEXP '("key1":"|"key2":"|"key3":"|"key4":")[^"]*[๊ฐ-ํฃ]+'
)
SELECT
W1.*, W2.Extracted_Korean_Content
FROM W1 INNER JOIN W2 ON W1.sequence = W2.sequence
ORDER BY W1.sequence DESC
*REGXP_SUBSTR() ๋ฉ์๋์์ ํจํด์ด ์๋ ๊ฐ์ ์ถ์ถํ๋ค
W1 ํ ์ด๋ธ์ ํ๊ธ์ด ํฌํจ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ,
W2 ํ ์ด๋ธ์์ ํน์ ํค ๋ค์ ํ๊ธ์ด ์ค๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธ ํ ํ
์ด๋ ์กฐ์ธ์ ํตํด ๋ด๊ฐ ์ํ๋ ํค์ ํ๊ธ์ด ์๋ ๊ฒฝ์ฐ๋ง ์ถ์ถํ ์ ์๋ค