프로그래밍/오라클 SQL과 PLSQL

SQL에서 숫자 상수가 문자열로 취급되는 경우

이자다 2023. 3. 26. 02:40
반응형

문제를 풀다가 의문점이 발생했다.

 

select name, jumin, decode(substr(jumin,7, 1), 1, 'MAN', 2, 'WOMAN') "Gender"
from student
where deptno1 = 101;

이 문제에서 decode 조건문에서는 1과 2를 따옴표로 감싸지 않아도 동작했다.

 

select name, tel, decode(substr(TEL, 1, instr(tel, ')')-1), '02', 'SEOUL', '031', 'GYEONGGI', '051', 'BUSAN', '052', 'ULSAN', '055', 'GYEONGNAM') loc
from student
where deptno1 = 101;

하지만 위 코드에서는 지역번호 02, 031, 051 등을 따옴표로 감싸지 않으면 동작하지 않았다.

 

02 등 지역번호들을 숫자취급하지 않고 문자열로 취급했다는 뜻이다.

 

substr문과 instra문의 문제는 아니다.

 

substr문은 반환값의 형식이 varchar2(가변길이 문자열 데이터 타입)이지만 숫자와 비교는 정상적으로 된다.

 

instr문은 반환값이 숫자다.

 

그래서 왜 그런가 chatGPT 선생님에게 여쭤봤다.

 

 

 

 

 

즉, 지역번호는 숫자상수 앞에 '0'이 붙어서 문자열 상수로 취급받아버렸고.

 

 

 

 

문자열 상수를 따옴표로 감싸지 않아서 코드가 제대로 동작하지 않았던 것이다.

반응형