You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DuckDB技术问题:如何用WHERE子句判断VARCHAR是否在LIST中

解决DuckDB中判断VARCHAR是否在LIST的WHERE条件错误

你有一个LIST类型的变量dois,值为:

["10.3390/polym11050769", "10.1016/j.ijbiomac.2022.09.237"]

还有一个VARCHAR类型的字段article_doi,值为"10.3390/polym11050769"。尝试用以下语句判断article_doi是否在dois中时触发错误:

WHERE CAST(article_doi AS VARCHAR) IN (dois)

错误信息:

duckdb error: Conversion Error: Type VARCHAR with value '10.1016/j.jeurceramsoc.2004.01.003' can't be cast to the destination type LIST

错误原因

IN运算符要求右侧是离散值集合或子查询结果,直接传入LIST类型变量时,DuckDB会错误地尝试将左侧的VARCHAR值转换为LIST类型,导致转换失败。

正确实现方法

方法1:使用LIST_CONTAINS函数(推荐)

DuckDB提供了专门的LIST_CONTAINS函数,用于判断元素是否存在于LIST中,语法简单高效:

WHERE LIST_CONTAINS(dois, article_doi)

方法2:用UNNEST展开LIST后使用IN

如果坚持使用IN,可以通过UNNEST将LIST展开为单行数据集,再进行匹配:

WHERE article_doi IN (SELECT UNNEST(dois))

这两种方法都能正确判断article_doi是否在dois列表中,避免类型转换错误。

内容的提问来源于stack exchange,提问作者Milos Cuculovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:52:13