使用WHERE continent IS NOT NULL过滤仍出现NULL值的问题求助
解决SQL查询中continent列仍存在NULL值的问题
情况1:数据中不是真正的NULL,而是空字符串/空格
有些数据源会用空字符串('')或空格代替NULL,这时候IS NOT NULL无法过滤这类值。可以通过TRIM()去掉前后空格后排除空内容:SELECT * FROM covidDeaths WHERE continent IS NOT NULL AND TRIM(continent) <> '' ORDER BY date asc;情况2:数据中存在文本形式的'NULL'
部分数据集会把缺失值存成字符串'NULL',这种值不属于SQL的NULL类型,IS NOT NULL不会对其生效,需要额外排除:SELECT * FROM covidDeaths WHERE continent IS NOT NULL AND TRIM(continent) <> '' AND TRIM(continent) <> 'NULL' ORDER BY date asc;情况3:数据中包含不可见字符
若存在换行符、制表符这类不可见字符,TRIM()可能无法完全处理,可通过长度判断过滤无效值:SELECT * FROM covidDeaths WHERE continent IS NOT NULL AND LENGTH(TRIM(continent)) > 0 ORDER BY date asc;额外补充:直接过滤非国家的location
既然目标是只看国家数据,可直接排除location为大洲/全球的行(比如'World'、'Asia'这类),双重保障结果准确性:SELECT * FROM covidDeaths WHERE continent IS NOT NULL AND TRIM(continent) <> '' AND location NOT IN ('World', 'Asia', 'Europe', 'Africa', 'North America', 'South America', 'Oceania') ORDER BY date asc;
内容的提问来源于stack exchange,提问作者Bobby
相关产品推荐
相关产品推荐

