2014-11-10 6 views
0

배경 값 : (! 그래, 난 그것을 변화 AM) 나는 기존의 SQL Server 2000 데이터베이스를 처리하고있어널 열

합니다. 그것은 우리가 이름을 부를 수있는 컬럼을 가지고 있는데, 이는 null이 아닌 nvarchar (100)입니다. 나는 이것을 확인했다. 나는이 쿼리를 실행하면

는 :

select name 
from mytable 
where name is null 

을 나는 어떤 결과를 얻을 수 없습니다. 그러나 다음 쿼리를 실행할 때

select name 
from mytable 
where name = '' 

약 100 개의 결과가 표시됩니다. ,

select ASCII(substring(name, 1, 1)) 
from s 
where name = '' 

이 결과 약 3 분의 1 "32"를 반환 : 공간이 아닌 널 (null) 열에서 법적 될 때부터,이 빈 값에 대해 조금 더 알아 싶어서이 쿼리를 실행 즉 공간. 그러나 나머지 2/3의 경우 null을 반환합니다.

질문 :

  1. 이 어떻게 널이 아닌 정의가 열에 null 값이있을 수 있습니까?
  2. null 값이 "name is null"쿼리에 나타나지 않는 이유는 무엇입니까?
+0

당신은'NULL' 값을 가지고 있지 않습니다. – Lamak

+0

문자 값 '\ 0'이 (가) 'NULL'로 해석됩니다. 그 공식 이름은 "NUL"이라고 생각합니다. –

+0

'NULL '을 반환하는'ASCII (substring (name, 1, 1))'은'name'이 null이라는 것을 의미하지 않는다는 것을 이해해야합니다. – Lamak

답변

3

name 열에 NULL이 없으므로 첫 번째 쿼리에서 확인했습니다.

name = '' 조건은 빈 문자열 및 공백 문자열과 일치합니다.

name이 비어있는 경우 SUBSTRING(name, 1, 1)도 비어 있으며, 따라서 인수는 ASCII입니다. 이 경우 ASCII은 NULL을 반환합니다. name이 공백 문자열 인 경우 ASCII에 제공된 인수는 공백이므로 결과는 32이며 공백 문자의 ASCII 코드입니다.

+0

입니다. 고마워요, 이것으로 훨씬 더 명확 해집니다. –