我有一个SQL数据库,我使用WHERE子句来提取值来进行过滤。但是,我想看看INTEGER字段值是否是TEXT字段值的子字符串。需要注意的是,我需要使用通配符。
一些示例数据:
id components
123 '234,345'
234 -
345 -
456 -
所以我想使用CAST(id as AS TEXT)并将其与'%'连接起来。如果id位于组件字符串的中间,则使用通配符(使用||)。但这不起作用,即
SELECT t1.*, t2.* FROM table t1 JOIN table t2 WHERE (t1.components IS NULL OR
(t1.components IS NOT NULL AND t1.components
NOT LIKE '%' || CAST(t2.id AS TEXT) || '%'))
OR (t2.components IS NULL OR (t2.components IS NOT NULL AND t2.components
NOT LIKE '%' ||
CAST(t1.id AS TEXT) || '%')))
不应返回记录对[123,234]或[123,345]
简而言之,如何在我的查询中将'%' || CAST(t2.id AS TEXT) || '%'
作为'%234%'
读入?
谢谢!
更新9-29-2014:好的,我明白了。它确实有效。我的括号出现了问题,并且我有一个OR,我应该有一个AND。新的工作代码(虽然可能不是最优的@deets)是:
SELECT t1.*, t2.* FROM table t1 JOIN table t2 WHERE (t1.components IS NULL OR
(t1.components IS NOT NULL AND t1.components
NOT LIKE '%' || CAST(t2.id AS TEXT) || '%'))
AND (t2.components IS NULL OR (t2.components IS NOT NULL AND t2.components
NOT LIKE '%' || CAST(t1.id AS TEXT) || '%')))