Home > Archive > SQL_archive > πŸ’‰[SQL] REPLACE, SUBSTRING, CONCAT

πŸ’‰[SQL] REPLACE, SUBSTRING, CONCAT
SQL

REPLACE

β€˜REPLACE’ ν•¨μˆ˜λŠ” SQLμ—μ„œ λ¬Έμžμ—΄ λ‚΄μ˜ νŠΉμ • 뢀뢄을 λ‹€λ₯Έ λ¬Έμžμ—΄λ‘œ λ°”κΎΈκ³ μž ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” 데이터 μ •μ œλ‚˜ μˆ˜μ • μž‘μ—…μ—μ„œ 특히 μœ μš©ν•˜λ©°, κΈ°μ‘΄ λ¬Έμžμ—΄ λ‚΄μ˜ νŠΉμ • νŒ¨ν„΄μ΄λ‚˜ 문자λ₯Ό μ°Ύμ•„ 이λ₯Ό μƒˆλ‘œμš΄ λ¬Έμžμ—΄λ‘œ λŒ€μ²΄ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • β€˜REPLACE’ λŠ” 둜그 데이터 정리, μ‚¬μš©μž μž…λ ₯ λ°μ΄ν„°μ˜ ν‘œμ€€ν™”, 데이터 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μž‘μ—… λ“± λ‹€μ–‘ν•œ μƒν™©μ—μ„œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

β€˜REPLACE’ μ‚¬μš© 예

  • νŠΉμ • λ¬Έμžμ—΄ λŒ€μ²΄: 고객 λ°μ΄ν„°μ—μ„œ μ „ν™”λ²ˆν˜Έ ν˜•μ‹μ„ λ³€κ²½ν•˜κ³  싢을 λ•Œ
    SELECT REPLACE(phone_number, '-', '') FROM customers;
    

    이 μΏΌλ¦¬λŠ” β€˜customers’ ν…Œμ΄λΈ”μ˜ β€˜phone_number’ μ—΄μ—μ„œ λͺ¨λ“  ’-β€˜ λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.
    예λ₯Ό λ“€μ–΄, β€˜123-456-7890’ μ΄λΌλŠ” μ „ν™”λ²ˆν˜Έκ°€ μžˆμ„ 경우, β€˜1234567890’ 으둜 λ³€κ²½λ©λ‹ˆλ‹€.

  • 데이터 μ •μ œ: μ‚¬μš©μžμ˜ 이메일 μ£Όμ†Œμ—μ„œ 도메인을 λ³€κ²½ν•˜κ³  싢을 λ•Œ
    UPDATE users SET email = REPLACE(email, '@old_domain.com', '@new_domain.com');
    

    이 μΏΌλ¦¬λŠ” β€˜users’ ν…Œμ΄λΈ”μ˜ β€˜email’ μ—΄μ—μ„œ β€˜@old_domail.com’ 을 β€˜@new_domain.com’ 으둜 λ³€κ²½ν•©λ‹ˆλ‹€.

  • ν…μŠ€νŠΈ λ‚΄μš© μˆ˜μ •: μƒν’ˆ μ„€λͺ…μ—μ„œ νŠΉμ • 단어λ₯Ό μƒˆλ‘œμš΄ λ‹¨μ–΄λ‘œ λ°”κΎΈκ³  싢을 λ•Œ
    UPDATE products SET description = REPLACE(description, 'oldword', 'newword');
    

    이 μΏΌλ¦¬λŠ” β€˜products’ ν…Œμ΄λΈ”μ˜ β€˜description’ μ—΄μ—μ„œ β€˜oldword’ λ₯Ό β€˜newword’ 둜 λ³€κ²½ν•©λ‹ˆλ‹€.

β€˜REPLACE’ ν•¨μˆ˜μ˜ νŠΉμ§•.

  • β€˜REPLACE’ λŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ—¬ μž‘λ™ν•©λ‹ˆλ‹€.
    • λŒ€μ†Œλ¬Έμž ꡬ뢄 없이 λŒ€μ²΄λ₯Ό ν•˜κ³ μž ν•  경우, 좔가적인 ν•¨μˆ˜λ‚˜ 쑰건을 μ‚¬μš©ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ¬Έμžμ—΄ λ‚΄μ—μ„œ μ§€μ •λœ νŒ¨ν„΄μ΄λ‚˜ λ¬Έμžμ—΄μ„ μ°Ύμ•„ λͺ¨λ‘ λŒ€μ²΄ν•©λ‹ˆλ‹€.
    • 찾고자 ν•˜λŠ” λ¬Έμžμ—΄μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄, 원본 λ¬Έμžμ—΄μ΄ λ³€κ²½ 없이 κ·ΈλŒ€λ‘œ λ°˜ν™˜λ©λ‹ˆλ‹€.
  • β€˜REPLACE’ ν•¨μˆ˜λŠ” β€˜SELECT’, β€˜UPDATE’ λ“±μ˜ 쿼리 λ‚΄μ—μ„œ μ‚¬μš©ν•  수 있으며, 데이터 쑰회 λ˜λŠ” μˆ˜μ • μž‘μ—…μ— λͺ¨λ‘ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš© μ‹œ 고렀사항

  • λŒ€λŸ‰μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” β€˜REPLACE’ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 쿼리의 μ„±λŠ₯에 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • 특히 β€˜UPDATE’ μž‘μ—…μ—μ„œλŠ” λŒ€μ²΄ μž‘μ—…μœΌλ‘œ 인해 λŒ€λŸ‰μ˜ 데이터가 변경될 수 μžˆμœΌλ―€λ‘œ, 사전에 μž‘μ—… λ²”μœ„λ₯Ό 잘 νŒŒμ•…ν•˜κ³  ν•„μš”ν•œ 백업을 μˆ˜ν–‰ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
  • λ¬Έμžμ—΄ λŒ€μ²΄ μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•ŒλŠ” μ›μΉ˜ μ•ŠλŠ” 데이터 변경을 λ°©μ§€ν•˜κΈ° μœ„ν•΄, λŒ€μ²΄ν•  λ¬Έμžμ—΄μ΄ μ •ν™•νžˆ μΌμΉ˜ν•˜λŠ”μ§€ 사전에 ν™•μΈν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

β€˜REPLACE’ ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ 데이터λ₯Ό μ‰½κ²Œ μˆ˜μ •ν•˜κ³  μ •μ œν•  수 μžˆλŠ” κ°•λ ₯ν•œ λ„κ΅¬λ‘œ, λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ˜ 데이터 관리 및 μœ μ§€λ³΄μˆ˜ μž‘μ—…μ— 널리 μ‚¬μš©λ©λ‹ˆλ‹€.

SUBSTRING

β€˜SUBSTRING’ ν•¨μˆ˜λŠ” SQLμ—μ„œ λ¬Έμžμ—΄μ˜ νŠΉμ • 뢀뢄을 μΆ”μΆœν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ 데이터 λ‚΄μ—μ„œ νŠΉμ • μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ ν•œ λΆ€λΆ„ λ¬Έμžμ—΄(substring)을 λ°˜ν™˜ν•˜λ©°, 데이터 μ •μ œ, νŠΉμ • ν˜•μ‹μ˜ 데이터 μΆ”μΆœ, λ˜λŠ” λ¬Έμžμ—΄ 처리 μž‘μ—…μ—μ„œ 맀우 μœ μš©ν•©λ‹ˆλ‹€.
  • β€˜SUBSTRING’ 은 둜그 뢄석, 데이터 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μ‚¬μš©μž μž…λ ₯의 νŠΉμ • λΆ€λΆ„ 처리 λ“± λ‹€μ–‘ν•œ μƒν™©μ—μ„œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

β€˜SUBSTRING’ μ‚¬μš© 예

  • νŠΉμ • μœ„μΉ˜μ˜ λ¬Έμžμ—΄ μΆ”μΆœ: μ‚¬μš©μž μ΄λ©”μΌμ—μ„œ 도메인 λΆ€λΆ„λ§Œμ„ μΆ”μΆœν•˜κ³  싢을 λ•Œ
    SELECT SUBSTRING(email FROM POSITION ('@' IN email) + 1) FROM users;
    

    이 μΏΌλ¦¬λŠ” β€˜users’ ν…Œμ΄λΈ”μ˜ β€˜email’ μ—΄μ—μ„œ ’@’ 기호 λ’€μ˜ 도메인 뢀뢄을 μΆ”μΆœν•©λ‹ˆλ‹€.

  • κ³ μ •λœ ν˜•μ‹μ˜ λ¬Έμžμ—΄ 처리: μ „ν™”λ²ˆν˜Έμ—μ„œ μ§€μ—­ μ½”λ“œλ₯Ό μΆ”μΆœν•˜κ³  싢을 λ•Œ
    SELECT SUBSTRING(phone_number, 1, 3) FROM customers;
    

    이 μΏΌλ¦¬λŠ” β€˜customers’ ν…Œμ΄λΈ”μ˜ β€˜phone_number’ μ—΄μ—μ„œ 처음 3자리(μ§€μ—­ μ½”λ“œ)λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.

  • λ¬Έμžμ—΄μ˜ νŠΉμ • λΆ€λΆ„ μˆ˜μ • μž‘μ—…μ— μ‚¬μš©: μ£Όμ†Œμ—μ„œ νŠΉμ • 뢀뢄을 λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ λ³€κ²½ν•˜κ³  싢을 λ•Œ
    UPDATE addresses SET street = SUBSTRING(street, 1, 10) || '...' WHERE LENGTH(street) > 10;
    

    이 μΏΌλ¦¬λŠ” β€˜addresses’ ν…Œμ΄λΈ”μ˜ β€˜street’ μ—΄μ—μ„œ λ¬Έμžμ—΄μ˜ 길이가 10자λ₯Ό μ΄ˆκ³Όν•˜λŠ” 경우, 처음 10μžλ§Œμ„ 남기고 κ·Έ λ’€λ₯Ό β€˜β€¦β€˜ 으둜 λŒ€μ²΄ν•©λ‹ˆλ‹€.

β€˜SUBSTRING’ ν•¨μˆ˜μ˜ νŠΉμ§•

  • β€˜SUBSTRING’ 은 λ¬Έμžμ—΄μ˜ νŠΉμ • μ„Ήμ…˜μ„ λ°˜ν™˜ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, μ‹œμž‘ μœ„μΉ˜μ™€ 길이(선택적)λ₯Ό μ§€μ •ν•˜μ—¬ μ›ν•˜λŠ” λΆ€λΆ„ λ¬Έμžμ—΄μ„ μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ λ¬Έμžμ—΄ 처리 μž‘μ—…μ— ν™œμš©λ  수 있으며, λ°μ΄ν„°μ˜ ν˜•μ‹μ„ λ³€κ²½ν•˜κ±°λ‚˜, νŠΉμ • νŒ¨ν„΄μ— κΈ°λ°˜ν•œ 정보λ₯Ό μΆ”μΆœν•˜λŠ” λ“±μ˜ λͺ©μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • ν•¨μˆ˜μ˜ μ •ν™•ν•œ ꡬ문은 μ‚¬μš©ν•˜λŠ” SQL λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ— 따라 μ•½κ°„μ”© λ‹€λ₯Ό 수 μžˆμœΌλ―€λ‘œ, ν•΄λ‹Ή μ‹œμŠ€ν…œμ˜ λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

μ‚¬μš© μ‹œ 고렀사항

  • β€˜SUBSTRING’ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ¬Έμžμ—΄μ˜ μΈλ±μŠ€κ°€ 1λΆ€ν„° μ‹œμž‘ν•œλ‹€λŠ” 점을 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.(λŒ€λΆ€λΆ„μ˜ SQL μ‹œμŠ€ν…œμ—μ„œ).
  • λŒ€λŸ‰μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” β€˜SUBSTRING’ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 쿼리의 μ„±λŠ₯에 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν•„μš”ν•œ 경우, μ μ ˆν•œ 인덱슀 μ‚¬μš©κ³Ό 데이터 필터링을 톡해 μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

β€˜SUBSTRING’ ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ 데이터λ₯Ό 효과적으둜 μ²˜λ¦¬ν•˜κ³  λΆ„μ„ν•˜λŠ” 데 μžˆμ–΄ ν•„μˆ˜μ μΈ λ„κ΅¬λ‘œ, λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ λ‹€μ–‘ν•œ λ¬Έμžμ—΄ μ‘°μž‘ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 널리 μ‚¬μš©λ©λ‹ˆλ‹€.

CONCAT

β€˜CONCAT’ ν•¨μˆ˜λŠ” SQLμ—μ„œ 두 개 μ΄μƒμ˜ λ¬Έμžμ—΄μ„ ν•˜λ‚˜λ‘œ κ²°ν•©ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

  • 이 ν•¨μˆ˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ λ‹€μ–‘ν•œ λ¬Έμžμ—΄ 정보λ₯Ό 합쳐 μƒˆλ‘œμš΄ λ¬Έμžμ—΄ 값을 μƒμ„±ν•˜κ³ μž ν•  λ•Œ μœ μš©ν•˜λ©°, λ³΄κ³ μ„œ μž‘μ„±, 데이터 ν˜•μ‹μ˜ ν‘œμ€€ν™”, μ‚¬μš©μž μ΄λ¦„μ΄λ‚˜ μ£Όμ†Œμ™€ 같은 λ°μ΄ν„°μ˜ κ²°ν•© λ“± λ‹€μ–‘ν•œ μƒν™©μ—μ„œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

β€˜CONCAT’ μ‚¬μš© 예

  • λ‹¨μˆœν•œ λ¬Έμžμ—΄ κ²°ν•©: μ‚¬μš©μžμ˜ 이름과 성을 ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ κ²°ν•©ν•˜κ³  싢을 λ•Œ
    SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
    

    이 μΏΌλ¦¬λŠ” β€˜users’ ν…Œμ΄λΈ”μ˜ β€˜first_name’ κ³Ό β€˜last_name’ 을 곡백으둜 κ΅¬λΆ„ν•˜μ—¬ κ²°ν•©ν•œ ν›„, β€˜full_name’ μ΄λΌλŠ” μƒˆλ‘œμš΄ μ—΄λ‘œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • 볡수의 μ—΄ κ²°ν•©: 고객의 μ£Όμ†Œ 정보λ₯Ό ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ κ²°ν•©ν•˜κ³  싢을 λ•Œ
    SELECT CONCAT(street_address, ', ', city, state, ' ', postal_code) AS full_address FROM customers;
    

    이 μΏΌλ¦¬λŠ” β€˜customers’ ν…Œμ΄λΈ”μ—μ„œ μ—¬λŸ¬ μ£Όμ†Œ κ΄€λ ¨ 열을 μ½€λ§ˆμ™€ 곡백을 μ‚¬μš©ν•˜μ—¬ κ²°ν•©ν•˜κ³ , 이λ₯Ό β€˜full_address’ λΌλŠ” μƒˆλ‘œμš΄ μ—΄λ‘œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • 데이터 ν˜•μ‹ ν‘œμ€€ν™”: μƒν’ˆ μ½”λ“œμ™€ μƒν’ˆ 이름을 κ²°ν•©ν•˜μ—¬ ν‘œμ€€ ν˜•μ‹μ˜ μƒν’ˆ 정보λ₯Ό μƒμ„±ν•˜κ³  싢을 λ–„
    SELECT CONCAT(product_code, ': ', product_name) AS product_info FROM products;
    

    이 μΏΌλ¦¬λŠ” β€˜products’ ν…Œμ΄λΈ”μ˜ β€˜product_code’ 와 β€˜product_name’ 을 콜둠과 곡백으둜 κ΅¬λΆ„ν•˜μ—¬ κ²°ν•©ν•œ ν›„,
    β€˜product_info’ λΌλŠ” μƒˆλ‘œμš΄ μ—΄λ‘œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

β€˜CONCAT’ ν•¨μˆ˜μ˜ νŠΉμ§•

  • β€˜CONCAT’ ν•¨μˆ˜λŠ” 두 개 μ΄μƒμ˜ λ¬Έμžμ—΄μ„ λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ 이듀을 μˆœμ„œλŒ€λ‘œ κ²°ν•©ν•œ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ μƒμ„±ν•©λ‹ˆλ‹€.
  • 거의 λͺ¨λ“  SQL λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ μ§€μ›λ˜λ©°, λ¬Έμžμ—΄ μ²˜λ¦¬μ™€ 데이터 ν˜•μ‹μ˜ λ³€ν™˜μ— 널리 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 일뢀 λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œλŠ” β€˜CONCAT’ λŒ€μ‹  μ—°μ‚°μž(**’ Β  β€˜** λ“±)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ κ²°ν•©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš© μ‹œ 고렀사항

  • κ²°ν•©ν•˜λ €λŠ” λ¬Έμžμ—΄ 쀑 ν•˜λ‚˜λΌλ„ β€˜NULL’ 값을 ν¬ν•¨ν•˜λŠ” 경우, β€˜CONCAT’ 의 λ™μž‘μ€ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ— 따라 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, 일뢀 μ‹œμŠ€ν…œμ€ β€˜NULL’ 을 빈 λ¬Έμžμ—΄λ‘œ μ·¨κΈ‰ν•  수 μžˆμœΌλ‚˜, λ‹€λ₯Έ μ‹œμŠ€ν…œμ—μ„œλŠ” 전체 κ²°κ³Όκ°€ β€˜NULL’ 이 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ³΅μž‘ν•œ λ¬Έμžμ—΄ 결합을 μˆ˜ν–‰ν•  λ•ŒλŠ” μ„±λŠ₯에 μ£Όμ˜ν•΄μ•Ό ν•˜λ©°, 특히 λŒ€λŸ‰μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” 쿼리 μ„±λŠ₯을 ν…ŒμŠ€νŠΈν•˜κ³  μ΅œμ ν™”ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

β€˜CONCAT’ ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ 데이터λ₯Ό κ²°ν•©ν•˜κ³  μ‘°μž‘ν•˜λŠ” κ³Όμ •μ—μ„œ ν•„μˆ˜μ μΈ λ„κ΅¬λ‘œ, λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ λ‹€μ–‘ν•œ λ¬Έμžμ—΄ κ΄€λ ¨ μž‘μ—…μ„ κ΅¬ν–‰ν•˜λŠ” 데 ν™œμš©λ©λ‹ˆλ‹€.