sql-server 문자형 데이터끼리 크기 비교 관련 질문이 있습니다. 0 2 689

by 루네미잔 [SQL Query] SQLServer [2020.10.21 15:42:28]


안녕하세요.

데이터에 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'로 하면 조회는 되네요)

 

by 마농 [2020.10.21 16:40:54]

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

 


by 루네미잔 [2020.10.21 18:16:40]

감사합니다. 

binary 정렬하는 방법이랑 문자 정렬 방법에 따라 order 가 다른 것을 알 수 있었습니다.

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