显示与结果匹配的参数

时间:2018-10-03 18:13:29

标签: sql postgresql pattern-matching

我有一个正在查询的POSTGRESQL数据库。我正在寻找特定字段的值列表。该查询功能正常,但我想显示与值列表匹配的条目,以使该条目对查询有效。

<bean id="mdm" class="MyDatabaseManager">
     <constructor-arg ref = "writeEntityManagerFactory"/>
</bean>

我想知道在消息字段中找到了哪些“ testValues”。

1 个答案:

答案 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