0

SELECT 'a'='b'='c' 가 왜 1이 나오나요?

보시면 ‘a’='b’는 다른값이니까 0이 나오는데
‘a’=‘b’='c’는 1이 나오더라구요, 그러니까 참값이라는거잖아요?
인젝션에 쓰일것 같기도 한 현상이긴 한데…

제 생각에는 = 는 왼쪽으로 가는 연산자니까

‘b’='c’를 먼저 계산해서 1이되고

‘a’=1

이 되니까 타입 자체가 달라서 0 될거 같은데 이상하더라구요

1 answers
1

Type Conversion in Expression Evaluation 링크에서 알 수 있듯 stringinteger 사이에서의 비교는 number 로 발생합니다.

In all other cases, the arguments are compared as floating-point (real) numbers.

즉, 해당 예가 other cases 에 해당하기에 모든 숫자는 float 으로 전환된 뒤에 발생한다고 생각하면 이해가 쉬우실 겁니다.

돌아가서 string간의 비교 (‘b’=‘c’)는 다르기에 0을 반환합니다. 다음 처리할 논리 연산 ‘a’=0은 먼저 'a’가 Conversion 법칙을 따라 마지막에 등장한 숫자까지만 유효하게 자르는 법칙(예: ‘123.45e6test’ -> 123.45e6 = 123.45 * 10^6 = 123,450,000)이 적용되어 '' 으로 치환되고 이 값이 다시 0으로 치환되고, 0=0이 실행되어 마지막 결과값 1을 반환합니다.