选择值匹配-SQL
您是否可以建议为查询中的多个子字符串选择一个计数 因此,如果我有一个消息字段,其中包含例如文本消息,我可以选择值匹配-SQL,sql,oracle,substring,Sql,Oracle,Substring,您是否可以建议为查询中的多个子字符串选择一个计数 因此,如果我有一个消息字段,其中包含例如文本消息,我可以 SELECT COUNT(1) FROM MESSAGES WHERE MESSAGE_BODY LIKE '%hello%' 但我想做的更多: SELECT STRING, COUNT(1) FROM MESSAGES WHERE MESSAGE_BODY IN (list of strings with wild card) 这可能吗 要分解示例,请执行以下操作: ID|消
SELECT COUNT(1)
FROM MESSAGES
WHERE MESSAGE_BODY LIKE '%hello%'
但我想做的更多:
SELECT STRING, COUNT(1)
FROM MESSAGES
WHERE MESSAGE_BODY IN (list of strings with wild card)
这可能吗
要分解示例,请执行以下操作:
ID|消息体1 |你好吗?
2|嗨,非常感谢
3 |你好,情况怎么样?
4 |再见 需要输出: 你好,2
再见,1 选择(输入字符串),计数(1) 从桌子上
其中(“%hello%”、“%ciao%”)中的(输入字符串)如果我理解正确,您可以尝试以下方法:
SELECT t.string,
CASE WHEN t.MESSAGE_BODY LIKE '%laptop%' then 1 else 0 END +
CASE WHEN t.MESSAGE_BODY LIKE '%one%' then 1 else 0 END +
CASE WHEN t.MESSAGE_BODY LIKE '%two%' then 1 else 0 END as count_col
FROM YourTable t
如果您只需要多个LIKE
comaparison,请使用REGEXP\u LIKE()
:
编辑:您可以使用包含您感兴趣的所有字符串的派生表,并左键连接到原始表进行计数:
SELECT t.wrd,COUNT(s.id) as cnt
FROM (
SELECT 'hello' as wrd FROM DUAL
UNION ALL
SELECT 'ciao' as wrd FROM DUAL) t
LEFT OUTER JOIN messages s
ON(s.message_body LIKE '%' || t.wrd || '%')
GROUP BY t.wrd
以下是寻找整句话的步骤:
SELECT a.word, COUNT (message.message_body)
FROM ( SELECT REGEXP_SUBSTR ('hello,ciao', '[^,]+', 1, LEVEL) word
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('hello,ciao', '[^,]+', 1, LEVEL) IS NOT NULL) a
LEFT OUTER JOIN MESSAGES ON REGEXP_INSTR (MESSAGE_BODY, '(^|\s)' || a.word || '(\s|$)', 1, 1, 0, 'i') > 0
GROUP BY a.word
STRING
从何而来?我不知道,假设他知道自己在做什么(他在select中使用了它)嗨,谢谢你提供的信息-有没有办法让“select”中的字符串值就是我在Where子句中输入的字符串,它统计每次出现的次数?首先你必须帮助我更好地理解你。发布数据样本和预期输出,因为我真的不明白您在尝试做什么。您好,我刚刚更新了帖子以尝试更清楚一点:)
SELECT a.word, COUNT (message.message_body)
FROM ( SELECT REGEXP_SUBSTR ('hello,ciao', '[^,]+', 1, LEVEL) word
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('hello,ciao', '[^,]+', 1, LEVEL) IS NOT NULL) a
LEFT OUTER JOIN MESSAGES ON REGEXP_INSTR (MESSAGE_BODY, '(^|\s)' || a.word || '(\s|$)', 1, 1, 0, 'i') > 0
GROUP BY a.word