제가 아래와 같이 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 |
ASCII 코드라고 하기도 하고, 요즘은 UNICODE 라고 하는데.
케릭터셋이나 DB 종류에 따라 정렬기준이 달라질 수 있는데.
단순하게 그냥. 문자의 정렬 순서대로 크기 비교된다고 보시면 됩니다.
알려주셔서 정말 감사합니다. 저도 순서대로 비교하다가 더 큰 값이 있으면 그 값을 return 하는 거 아닐까 생각했는데,
Java 나 Python 같은 랭귀지와 달리 문서에서 정확하게 설명한 것을 찾을 수 없어서 질문드렸습니다. 많은 도움 되었어요. 감사합니다.
Java 나 python에서 찾을 때와 달리 오라클 문서에서 비교 방법을 설명한 부분을 쉽게 찾을 수 없었거든요. 제가 아마 잘 찾지 못했나 봅니다.
위에 댓글로 알려주신대로 문자형을 비교할 경우 문자 정렬 순서로 비교하기 때문에 비교방식이 동일하다는 것을 알았습니다.
다시 한번 감사드립니다.
자바나 파이썬의 문자 비교도 동일한 기준일 텐데요.
문자형 컬럼에 숫자를 넣고 쓴다면 결과가 틀려지겠죠.
제가 개발 공부 시작한 초보인데요. GREATEST 와 LEAST 가 다양한 데이터 타입을 받아서 처리해서 저에게는 좀 새롭고 신기합니다.
각각의 타입마다 비교 기준이 unicode 가 아니라 다른 기준이 되는 지도 궁금하기도 합니다.
숫자나 날짜는 그 자체로 크기 비교가 가능하고
문자의 경우는 문자의 정렬순서(아스키코드)대로 크기비교가 된다고 보시면 됩니다.
꼭 greatest 라서 신기할 필요가 없습니다.
그냥 거의 모든 언어에서의 정렬 및 크기비교에서 공통으로 사용되는 기준이 아닐까? 생각되네요.
넵, 명확한 설명 감사합니다.