프로그래밍/오라클 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'이 붙어서 문자열 상수로 취급받아버렸고.
문자열 상수를 따옴표로 감싸지 않아서 코드가 제대로 동작하지 않았던 것이다.
반응형