GREATEST 와 LEAST 함수에서 비교하는 값 0 8 3,542

by 여의주 [SQL Query] Oracle GREATEST LEAST 함수사용법 [2022.07.04 12:11:02]


제가 아래와 같이 test_t 라는 테이블을 만들고 각 row 의 date_s 와 date_e 를 GREATEST 와 LEAST 함수를 이용해서 날짜를 비교하고 있습니다. 쿼리 결과에서 date_s 와 date_e 는 아래와 같고 결과는 제가 원하는대로 나왔습니다. 그런데 예를 들어 '20220628' 와 '20220701' 중 어느 것이 더 큰지 비교한다면 이 때는 비교하는 기준이 unicoe 값을 비교하는 것인지 아니면 어떻게 비교하는지 궁금합니다.

WITH test_t AS
(
   SELECT 1 AS t_id, '20220628' date_s, '20220630' date_e FROM DUAL UNION ALL
   SELECT 2 AS t_id, '20220620' date_s, '20220715' date_e FROM DUAL UNION ALL
   SELECT 3 AS t_id, '20220701' date_s, '20220725' date_e FROM DUAL
)
SELECT t_id, GREATEST(date_s, '20220701') AS date_s, LEAST(date_e, '20220730') AS date_e
   FROM test_t 
;

 

실행 결과 중 date_s와 date_e 의 값은 아래와 같이 잘 나왔습니다.

 

 date_s   date_e
20220701 20220630
20220701 20220715
20220701 20220725

 

by 마농 [2022.07.04 13:11:50]

ASCII 코드라고 하기도 하고, 요즘은 UNICODE 라고 하는데.
케릭터셋이나 DB 종류에 따라 정렬기준이 달라질 수 있는데.
단순하게 그냥. 문자의 정렬 순서대로 크기 비교된다고 보시면 됩니다.


by 여의주 [2022.07.04 13:17:57]

알려주셔서 정말 감사합니다. 저도 순서대로 비교하다가 더 큰 값이 있으면 그 값을 return 하는 거 아닐까 생각했는데,

Java 나 Python 같은 랭귀지와 달리 문서에서 정확하게 설명한 것을 찾을 수 없어서 질문드렸습니다. 많은 도움 되었어요. 감사합니다.


by 마농 [2022.07.04 13:20:45]

자바나 파이썬의 문자 비교도 동일한 기준일 텐데요.


by 여의주 [2022.07.04 14:09:45]

Java 나 python에서 찾을 때와 달리 오라클 문서에서 비교 방법을 설명한 부분을 쉽게 찾을 수 없었거든요. 제가 아마 잘 찾지 못했나 봅니다.

위에 댓글로 알려주신대로 문자형을 비교할 경우 문자 정렬 순서로 비교하기 때문에 비교방식이 동일하다는 것을 알았습니다.

다시 한번 감사드립니다.


by 우리집아찌 [2022.07.04 13:30:36]

문자형 컬럼에 숫자를 넣고 쓴다면 결과가 틀려지겠죠.


by 여의주 [2022.07.04 14:13:01]

제가 개발 공부 시작한 초보인데요. GREATEST 와 LEAST 가 다양한 데이터 타입을 받아서 처리해서 저에게는 좀 새롭고 신기합니다.

각각의 타입마다 비교 기준이 unicode 가 아니라 다른 기준이 되는 지도 궁금하기도 합니다.


by 마농 [2022.07.04 14:20:19]

숫자나 날짜는 그 자체로 크기 비교가 가능하고
문자의 경우는 문자의 정렬순서(아스키코드)대로 크기비교가 된다고 보시면 됩니다.
꼭 greatest 라서 신기할 필요가 없습니다.
그냥 거의 모든 언어에서의 정렬 및 크기비교에서 공통으로 사용되는 기준이 아닐까? 생각되네요.


by 여의주 [2022.07.04 14:28:26]

넵, 명확한 설명 감사합니다. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입