DBMS/MySQL

[MYSQL] πŸ“š νƒ€μž… κ°•μ œ λ³€ν™˜ (cast / convert)

인파_ 2021. 11. 8. 16:00

νƒ€μž…λ³€ν™˜

νƒ€μž… κ°•μ œ λ³€ν™˜

MySQL은 λΉ„κ΅λ‚˜ 검색을 μˆ˜ν–‰ν•  λ•Œ λ°μ΄ν„°μ˜ νƒ€μž…μ΄ μ„œλ‘œ λ‹€λ₯Ό 경우, λ‚΄λΆ€μ μœΌλ‘œ νƒ€μž…μ΄ 같아지도둝 μžλ™ λ³€ν™˜ν•˜μ—¬ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ νƒ€μž…μ„ λ³€ν™˜ν•  수 μžˆλ„λ‘ λ‹€μ–‘ν•œ μ—°μ‚°μžμ™€ ν•¨μˆ˜λ„ 같이 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

​

μ•”μ‹œμ μΈ ν˜•λ³€ν™˜

  • λ¬Έμžμ—΄μ΄μ–΄λ„ ν•©μΉ˜λ©΄ 숫자둜 λ³€ν™˜
select '100' + '200';

select concat('100','200');

select concat(100,'200');

select 1 > '2mega';

select 3> '2mega';

select 0 = 'mega2';

BINARY

BINARY μ—°μ‚°μžλŠ” 뒀에 μ˜€λŠ” λ¬Έμžμ—΄μ„ λ°”μ΄λ„ˆλ¦¬ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

BINARY μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜λ©΄ λ¬Έμžκ°€ μ•„λ‹Œ λ°”μ΄νŠΈλ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜μ—¬ λΉ„κ΅λ‚˜ 검색 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SELECT BINARY 'a' = 'A'; -- false
SELECT 'a' = 'A'; -- true

μœ„μ˜ 예제처럼 BINARY μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜λ©΄, λΉ„κ΅ν•˜λ €λŠ” 문자의 λ°”μ΄νŠΈ 값을 λΉ„κ΅ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 문자 'a'와 'A'κ°€ μ„œλ‘œ λ‹€λ₯Έ κ°’μœΌλ‘œ μΈμ‹λ©λ‹ˆλ‹€.


CAST

CAST() ν•¨μˆ˜λŠ” 인수둜 전달받은 값을 λͺ…μ‹œλœ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ΄λ•Œ λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” νƒ€μž…μ„ AS μ ˆμ„ μ΄μš©ν•˜μ—¬ 직접 λͺ…μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

CAST(expr AS type)

AS μ ˆμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” νƒ€μž…μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • BINARY
  • CHAR
  • DATE
  • DATETIME
  • TIME
  • DECIMAL
  • JSON (MySQL 5.7.8λΆ€ν„° 제곡됨)
  • NCHAR
  • SIGNED [INTEGER]
  • UNSIGNED [INTEGER]
SELECT 4 / '2',
4 / 2,
4 / CAST('2' AS UNSIGNED);

/*
μ‹€ν–‰ κ²°κ³Ό
2
2.0000
2.0000
*/

CONVERT

CONVERT() ν•¨μˆ˜λ„ CAST() ν•¨μˆ˜μ²˜λŸΌ 인수둜 전달받은 값을 λͺ…μ‹œλœ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.

CONVERT() ν•¨μˆ˜λŠ” 두 번째 인수둜 λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” νƒ€μž…μ„ 직접 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

CONVERT(expr, type) == CAST(expr as type)
CONVERT(expr USING transcoding_name)

USING μ ˆμ€ μ„œλ‘œ λ‹€λ₯Έ λ¬Έμžμ…‹(character set) κ°„μ˜ 데이터 λ³€ν™˜μ„ μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

μ΄λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” νƒ€μž…μ€ CAST() ν•¨μˆ˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

SELECT CONVERT('abc' USING utf8);