null을 허용하는 열의 문자 데이터를 비교하는 데 MIN 함수를 사용했지만 결과가 비참했습니다.모든 것을 varbinary로 변환하면 문자 데이터를 비교하는 올바른 방법이 있습니까?
sys.indexes의 행 수를 결정 :
select count(*) from sys.indexes;
실행이 SQL :
을 ;-) 여기 물건의 같은 종류를 보여줍니다 훨씬 단순화 된 예입니다select count(name), substring(cast(min(name) as varbinary),1,1) from sys.indexes;
카운트가 # 1과 일치하면 여기서 멈추십시오. 대신 다른 데이터베이스를 사용해보십시오.
메시지 탭으로 이동하십시오. 다음과 같이 표시됩니다. 경고 : 누적 값은 집계 또는 다른 SET 작업에 의해 제거됩니다.
경고를 해결하기 위해 "이름"열에 null을 어떻게 처리 하시겠습니까? 병합 된 ?
select count(coalesce(name,char(0x7e))), substring(cast(min(coalesce(name,char(0x7e))) as varbinary),1,1) from sys.indexes;
주 # 5의 MIN 함수의 결과 (0x7E가보다는 0x63) :
"COALESCE (이름, 문자 (0x7E가))"와 "이름"을 교체하고 SQL을 실행 .
질문 :
A.이 # 4 당 경고를 처리 할 수있는 적절한 방법 누락 (널) 데이터를 병합인가?
B. # 6의 결과가 예상과 다르므로 SQL Server에서 문자 데이터를 비교하는 올바른 방법은 무엇입니까? 모든 것을 varbinary로 변환 하시겠습니까? [편집 ...]
아래 논의
는 유착 통해 널 여분 상기 비교의 결과 사이의 관계에 대한 논의와 혼란이 있었다. 둘 사이의 관계는 다음과 같습니다. 하나의 문자를 포함한 문자열을 null 대체 자리 표시 자로 선택하면 (위의 4 번 및 5 번 단계) 해당 문자열이 현재 비교중인 예상 결과를 만족해야합니다. 쿼리의 다른 데이터 값에 대해 수행됩니다. 일부 데이터 정렬의 경우 적합한 문자열을 찾는 것이 다른 데이터 정렬보다 어려울 수 있습니다. 에
경고를 무시하십시오. 그것은 정보 메시지로서 만 존재합니다. 문자 데이터를 비교하기 위해'varbinary'로 형변환하면 안됩니다. –
경고를 무시하면 카운트가 꺼집니다. 이것이 원래 코드에서 처음부터주의를 끄는 부분입니다.이 코드는 좀 더 복잡합니다. –
'COUNT (col)'는'NOT NULL' 값만을 계산합니다. 행 수를 계산하려면'COUNT (*) '를 사용하십시오. 캐릭터 데이터를 비교하는 것과 어떤면에서 관련이 있는지 알지 못합니다. 원래 가지고 있던 문제를 알려주십시오. –