안녕하세요.
데이터에 nvarchar 형식으로 날짜 형식의 문자가 저장되어 있는 상태입니다.
궁금한 질문은 SQLServer에서 날짜 형식의 문자열 데이터를 숫자로만 이루어진 문자열과 비교 시, 데이터가 조회되는 규칙을 알고싶습니다.
아래는, 테스트를 위해 만든 간단한 예시 입니다.
with aaa
as
(
select '2020-10-21' a
)
select * from aaa
where a <= '20201021'
SQLServer로 조회시, 조회되는 것이 없습니다.
그런데? 오라클에서는 조회가 됩니다. 오라클은 앞부터 문자 비교를 하다가 '-'와 '1' 을 비교하니까, '1'이 더 커서 조회가 되는 것으로 이해했습니다.
SQLServer는 오라클과 조금 다르게 처리되는 것 같습니다.
where 절에 다른 날짜나 문자 조합해보면서 찾아봐도 규칙을 찾을 수 없어 질문 드려봅니다.
(P.S. where a <= '20201022'로 하면 조회는 되네요)
MSSQL COLLATE 로 검색해 보시면 될 것 같습니다.
WITH aaa AS ( SELECT '2020-10-21' a, '20201021' b ) SELECT * FROM aaa WHERE a < b COLLATE Korean_Wansung_BIN -- Binary 코드로 비교 ;
WITH aaa AS ( SELECT '2020-10-21' a UNION ALL select '2020-10-22' UNION ALL select '20201021' UNION ALL select '20201022' ) -- 1. 기본 값 정렬 : _CI_AS SELECT a FROM aaa ORDER BY a; -- Result 1 -- -- 20201021 -- 2020-10-21 -- 20201022 -- 2020-10-22 -- 2. 2진값 정렬 : _BIN SELECT a FROM aaa ORDER BY a COLLATE Korean_Wansung_BIN; -- Result 2 -- -- 2020-10-21 -- 2020-10-22 -- 20201021 -- 20201022