gpt4 book ai didi

postgresql - 为什么 Postgres position() 函数给出不同的结果?

转载 作者:行者123 更新时间:2023-11-29 14:05:29 24 4
gpt4 key购买 nike

我很困惑,为什么 Postgresql position 函数会为看似简单的测试给出不同的结果。

这是查询#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 文档以阐明零字符串和空字符串之间的区别,但运气还不太好......

提前致谢,--瑞克

最佳答案

position(needle in haystack)函数将返回:

  • 如果 needle 不为 NULL 且不在 haystack 中并且 haystack 不为 NULL,则为零。
  • 如果 needlehaystack 中,并且 one 是 haystack 的开头,则为正值。
  • 如果 needlehaystack 为 NULL,则为 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 | | |

n1n3 下的空白点是 NULL。

所以这个条件:

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

相当于:

D.comment IS NULL

鉴于此:

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

当且仅当 D.comment IS NOT NULLD.comment 不包含 'Previous subjectid:' 时才为真。

所以这两个条件是完全不同的。

关于postgresql - 为什么 Postgres position() 函数给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com