Почему функция Postgres position () дает разные результаты? - PullRequest
0 голосов
/ 20 декабря 2011

Я озадачен тем, почему функция положения Postgresql дает разные результаты для того, что кажется простым тестом.

Вот запрос № 1:

SELECT count(*)
FROM 
    dnasample D, ibg_studies ST, subjects S
WHERE 
    D.studyindex=ST.studyindex
    AND ST.studyabrv='CONGER'
    AND D.subjectidkey=S.id
    AND D.projectindex IS NULL
    AND POSITION('Previous subjectid:' in D.comment) IS NULL

, который возвращает результат 246.

Тогда вот запрос № 2:

SELECT count(*)
FROM 
    dnasample D, ibg_studies ST, subjects S
WHERE 
    D.studyindex=ST.studyindex
    AND ST.studyabrv='CONGER'
    AND D.subjectidkey=S.id
    AND D.projectindex IS NULL
    AND POSITION('Previous subjectid:' in D.comment)=0 

Я не понимаю, почему они дают такие разные результаты?

Я попытался прочитать документацию Postgres, чтобы прояснить разницу между нулем и нулевой строкой, но пока не так много удачи ...

Заранее спасибо, --Rick

Ответы [ 2 ]

5 голосов
/ 20 декабря 2011

Функция position(needle in haystack) вернет:

  • Ноль, если needle не NULL и не в haystack, а haystack не NULL.
  • Положительное значение, если needle находится в haystack, где единица является началом haystack.
  • NULL, если needle или haystack равны NULL.

Например:

=> select position('a'  in 'a' ) as a,
          position('a'  in 'b' ) as b,
          position('a'  in null) as n1,
          position(null in 'a' ) as n2,
          position(null in null) as n3;
 a | b | n1 | n2 | n3 
---+---+----+----+----
 1 | 0 |    |    |   

Это пустые места под n1 через n3 являются NULL.

Итак, это условие:

POSITION('Previous subjectid:' in D.comment) IS NULL

эквивалентноto:

D.comment IS NULL

, тогда как это:

POSITION('Previous subjectid:' in D.comment)=0

будет истинным, если и только если D.comment IS NOT NULL и D.comment не содержат 'Previous subjectid:'.

Итак, два условия совершенно разные.

1 голос
/ 20 декабря 2011

NULL на самом деле без значения .0 - это пул битовых данных.

В этом разница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...