PostgreSQL ํ•จ์ˆ˜ ํŒ ๐Ÿ˜

๋ฐ•์„ฑํ˜„ยท2025๋…„ 2์›” 11์ผ

PostgreSQL

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-thumbnail

PostgreSQL ํ•จ์ˆ˜ ํŒ ๐Ÿ˜

1. NULL๊ณผ ''(๋นˆ ๋ฌธ์ž์—ด)์€ ๋‹ค๋ฅด๋‹ค โš ๏ธ

PostgreSQL์—์„œ๋Š” NULL๊ณผ ''(๋นˆ ๋ฌธ์ž์—ด)์€ ๋‹ค๋ฅด์ง€๋งŒ,
Oracle์—์„œ๋Š” ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋œ๋‹ค.

SELECT '', NULL;

2. NULL ๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ (COALESCE) ๐Ÿ”„

NULL ๊ฐ’์„ ํŠน์ • ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•  ๋•Œ COALESCE๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

SELECT COALESCE('', '123'), COALESCE(NULL, '123');
-- ๊ฒฐ๊ณผ: '', '123'

3. ๋ฌธ์ž โ†’ ์ˆซ์ž ๋ณ€ํ™˜ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๐Ÿ”ข

์ฟผ๋ฆฌ์—์„œ numeric ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ::numeric์„ ์‚ฌ์šฉํ•œ๋‹ค.

SELECT (concat('0', '')::numeric);
SELECT (concat('0', null)::numeric);

MyBatis ์˜ˆ์‹œ

SELECT (concat('0', #{ my_num })::numeric);

4. ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ์ œ๊ฑฐํ•˜๊ธฐ ๐Ÿšซ

  • ์ „ํ™”๋ฒˆํ˜ธ์—์„œ ํŠน์ˆ˜ ๊ธฐํ˜ธ ์ œ๊ฑฐ
SELECT regexp_replace('010-5555-7777', '\D+', '', 'g');
-- ๊ฒฐ๊ณผ: '01055557777'
  • ๋‚ ์งœ ๋ฌธ์ž์—ด์—์„œ ํŠน์ˆ˜ ๋ฌธ์ž(-, ๊ณต๋ฐฑ, :) ์ œ๊ฑฐ
SELECT regexp_replace('2023-08-01 13:24:56', '(-| |:)', '', 'g');
-- ๊ฒฐ๊ณผ: '20230801132456'

5. ๋‚ ์งœ ๋ฌธ์ž์—ด ํฌ๋งท ๋ณ€๊ฒฝ ๐Ÿ“…

PostgreSQL์—์„œ to_date()๋Š” ์‹œ, ๋ถ„, ์ดˆ๊ฐ€ ๋ฌด์‹œ๋˜๋ฏ€๋กœ to_timestamp()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

SELECT
  '20230801133051' AS "๋ณ€ํ™˜ํ•  ๋ฌธ์ž",
  to_timestamp('20230801133051', 'YYYYMMDDHH24MISS') AS "1. ๋‚ ์งœ๋กœ ๋ณ€ํ™˜",
  to_char(to_timestamp('20230801133051', 'YYYYMMDDHH24MISS'), 'YYYY-MM-DD HH24:MI:SS') AS "2. ๋ฌธ์ž๋กœ ๋ณ€ํ™˜";

6. ํ˜• ๋ณ€ํ™˜ (INTEGER๋กœ) ๐Ÿ”„

SELECT '123'::INTEGER;

7. UPSERT ๋ฌธ (ON CONFLICT) ๐Ÿ”„

  • ON CONFLICT๋Š” INSERT ์‹œ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ํŠน์ • ์ปฌ๋Ÿผ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • seq, yea๋Š” Primary Key(PK)๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์ค‘๋ณต๋  ๊ฒฝ์šฐ DO UPDATE๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์›ํ•˜๋Š” ์ปฌ๋Ÿผ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ธฐ์กด ๊ฐ’ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉ)

INSERT INTO ํ…Œ์ด๋ธ”๋ช… (seq, yea, value)
VALUES (1, 2024, '์—…๋ฐ์ดํŠธ ํ…Œ์ŠคํŠธ')
ON CONFLICT (seq, yea)
DO UPDATE SET value = '์—…๋ฐ์ดํŠธ ์™„๋ฃŒ';

์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ด๋ณด๋ฉด Insert๋ฅผ ํ•˜๋Š”๋ฐ ๋งŒ์•ฝ ON CONFLIC์˜ ์†์„ฑ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ์ด ๊ทธ๋Œ€๋กœ ์กด์žฌํ•˜๋ฉด DO UPDATE SETํ•˜์—ฌ ๊ธฐ์กด ๊ฐ’์€ ์œ ์ง€ํ•œ์ฑ„๋กœ ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค !!!

profile
๊ฐœ๋ฐœ๊ธฐ๋ก์žฅ

0๊ฐœ์˜ ๋Œ“๊ธ€