๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DB - SQL

[SQL ์ž…๋ฌธ] 6. SELECT + REPLACE/REG_REPLACE ๋ณ€๊ฒฝ

by ๊พธ๋ฆฌ_No9 2024. 1. 24.

ORACLE ์˜ค๋ผํด SQL ์ž…๋ฌธ

 

[ํ•™์Šต ๋ชฉํ‘œ]

1. ๋‹จ์ผ Replace ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ๋ฌธ์ž/์ˆซ์ž ๋ณ€๊ฒฝ 

2. ๋‹ค์ค‘ Regexp_replace ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ๋ฌธ์ž/์ˆซ์ž ๋ณ€๊ฒฝ  

 

 

1. replace ์‚ฌ์šฉ ๊ทœ์น™ :

  • ๋ฌธ์ž ๋ณ€๊ฒฝ ์‹œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ํ•„์š”
  • ๋‹จ์ผ ๋ฌธ์ž/์ˆซ์ž ๋ณ€๊ฒฝ : replace ์‚ฌ์šฉ 
  • ๋‹ค์ค‘ ๋ฌธ์ž/์ˆซ์ž ๋ณ€๊ฒฝ : regexp_replace ์‚ฌ์šฉ 
  • select + replace ( ์นผ๋Ÿผ, ' ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’ ', ' ๋ณ€๊ฒฝ ๊ฐ’ ') as " ์นผ๋Ÿผ๋ช… "
    • ์นผ๋Ÿผ๋ช… : " ํฐ๋”ฐ์˜ดํ‘œ "
    • ๊ฐœ๋ณ„ ๋ฌธ์ž/๊ฐ’ : '์ž‘์€๋”ฐ์˜ดํ‘œ'  

 

2. ์‚ฌ์šฉ ์˜ˆ์‹œ 

 

 

#๋‹จ์ผ ๋ฌธ์ž ์ œ๊ฑฐ/๋ณ€๊ฒฝ ์‹œ : replace

select ename,  replace(ename, 'S') as "์ œ๊ฑฐ" , replace (ename, 'S', '*') as "๋Œ€์ฒด"
from emp ;

 

 

#๋‹ค์ค‘ ๋ฌธ์ž/์ˆซ์ž ์ œ๊ฑฐ/๋ณ€๊ฒฝ ์‹œ : regexp_replace 

select regexp_replace (ename, 'S|M|I', '*') as "๋‹ค์ค‘๋ฌธ์ž *๋ณ€ํ™˜"
from emp;

 

 

 

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

 

Hackerrank ๋ฌธ์ œ ํ’€์ด : The blunder

๋ฐ์ดํ„ฐ : ์ง์› ์—ฐ๋ด‰ ํ…Œ์ด๋ธ” 

์ƒํ™ฉ : ์ปดํ“จํ„ฐ์˜ 0 ๋ฒ„ํŠผ์ด ๊ณ ์žฅ ๋‚˜์„œ, ํ‰๊ท ๊ฐ’์„ ์ž˜๋ชป ๊ณ„์‚ฐํ•จ

๋ฌธ์ œ : ์‹ค์ œ ํ‰๊ท ๊ฐ’ - (0 ์—†์ด ์ž…๋ ฅ๋œ) ํ‹€๋ฆฐ ํ‰๊ท ๊ฐ’์„ ์ฐพ์•„๋ผ + round it up to the next integer.

 

SELECT CEIL ( AVG(salary) - AVG (REPLACE (salary,  0  , ' ' ) ) )

FROM employees

 

* CEIL ํ•จ์ˆ˜๋Š” 2356.6 =2357  & 2356.4 =2357 ์†Œ์ˆ˜์ ๊ณผ ์ƒ๊ด€์—†์ด +1์„ ๋”ํ•ด์ค€๋‹ค.

* ROUND ํ•จ์ˆ˜๋Š” 2356.6 =2357 / 2356.4 = 2356 ์†Œ์ˆ˜์ ์„ ๋ณด๊ณ  +1 ํ• ์ง€ ๋ง์ง€๋ฅผ ์ •ํ•œ๋‹ค.

* FLOOR ํ•จ์ˆ˜๋Š” 2356.6 =2356 & 2356.4 =2356 ์†Œ์ˆ˜์ ๊ณผ ์ƒ๊ด€์—†์ด ์ •์ˆ˜์—์„œ ์ž๋ฅธ๋‹ค.

*REPLACE ํ•จ์ˆ˜ = salary์˜, ์ˆซ์ž 0์„, ๋ชจ๋‘ ' ' ๋นˆ์นธ์œผ๋กœ ๋ฐ”๊ฟ”๋ผ