aws红移中的ILIKE和NOT ILIKE与总数不同

Posted

技术标签:

【中文标题】aws红移中的ILIKE和NOT ILIKE与总数不同【英文标题】:ILIKE and NOT ILIKE in aws redshift different from total 【发布时间】:2013-06-28 19:07:53 【问题描述】:

我在 amazon redshift 中运行了以下三个查询:

select count(*)  
from t1  

计数是 1554。

select count(*)  
from t1  
where  
    item_name ilike "blue"  

计数是 62。

select count(*)  
from t1  
where  
    item_name not ilike "blue"  

计数是 85。

最后两个 (62 + 85) 应该等于 1554。我错过了什么?

【问题讨论】:

【参考方案1】:

双引号用于标识符:"myColumn" 单引号用于值:'value'

您的示例与basic syntax rules 的示例相矛盾。

另外,您没有考虑NULL 值,它们都不符合:

item_name ilike 'blue'

也不是:

item_name not ilike 'blue'

你得到了什么:

SELECT count(*)                             AS all_rows
     , count(item_name  ~~* 'blue' OR NULL) AS item_name_blue
     , count(item_name !~~* 'blue' OR NULL) AS item_name_not_blue
     , count(item_name)                     AS item_name_not_null
     , count(item_name IS NULL OR NULL)     AS item_name_null
FROM   t1;

~~* .. ILIKE 的内部 Postgres 运算符!~~* .. NOT ILIKE 的内部 Postgres 运算符 (小心:运算符优先级略有不同。)

【讨论】:

谢谢。双引号是问题中的错字。一旦我添加了 null 来弥补差异。 对于使用此作为参考点的任何人,~~* 运算符对应于ILIKE,而不是根据 PostgreSQL 文档 9.7.1 的LIKE @John:谢谢,我修正了错字。 (顺便说一句:没有 Postgres 9.7 版。) @ErwinBrandstetter 好收获!我显然指的是 Postgres 12.4 文档中的节号 9.7.1

以上是关于aws红移中的ILIKE和NOT ILIKE与总数不同的主要内容,如果未能解决你的问题,请参考以下文章

红移中的正则表达式

红移中的完全外连接

红移中的 juliandate 到 normaldate

动态地将行旋转到红移中的列

红移中的长真空

红移中的 PERCENTILE_CONT()