我有一个正在查询的POSTGRESQL数据库。我正在寻找特定字段的值列表。该查询功能正常,但我想显示与值列表匹配的条目,以使该条目对查询有效。
<bean id="mdm" class="MyDatabaseManager">
<constructor-arg ref = "writeEntityManagerFactory"/>
</bean>
我想知道在消息字段中找到了哪些“ testValues”。
答案 0 :(得分:0)
如果您的用例保证一次只能匹配一个模式,或者您只对首次匹配感兴趣,请添加一个简单的CASE
表达式:
SELECT to_timestamp(p.createat/1000), p.message, u.username, c.displayname, c.name, c.type
, CASE
WHEN p.message ILIKE '%testValue1%' THEN '%testValue1%'
WHEN p.message ILIKE '%testValue2%' THEN '%testValue2%'
WHEN p.message ILIKE '%testValue3%' THEN '%testValue3%'
WHEN p.message ILIKE '%testValue4%' THEN '%testValue4%'
END AS first_match
FROM posts p
JOIN users u ON p.userid = u.id
JOIN channels c ON p.channelid = c.id
WHERE p.message ILIKE ANY (VALUES ('%testValue1%'),('%testValue2%'),('%testValue3%'),('%testValue4%'));
获取所有匹配项的一种方法:
ARRAY [CASE WHEN p.message ILIKE '%testValue1%' THEN '%testValue1%' END
, CASE WHEN p.message ILIKE '%testValue2%' THEN '%testValue2%' END
, CASE WHEN p.message ILIKE '%testValue3%' THEN '%testValue3%' END
, CASE WHEN p.message ILIKE '%testValue4%' THEN '%testValue4%' END] AS all_matches