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 ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ํ‚ค ๋’ค์— ํ•œ๊ธ€์ด ์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธ ํ•œ ํ›„

 

์ด๋„ˆ ์กฐ์ธ์„ ํ†ตํ•ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ‚ค์— ํ•œ๊ธ€์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค