我遇到的问题如下:
我使用的票务系统使用插件来实现工作流程。 在这种情况下,我使用SQL对收到的电子邮件进行预排序。 SQL查询如下所示:
SELECT Count(Case when {MSG_CC_002_DeviceReg_MailBody} LIKE '%You have received an invoice from%' Then 1 END);
我现在想要做的是,而不是使用LIKE,然后再使用上面的特定短语,我想将其与包含所有必要短语的数据库表中的列进行比较。
该表只有两列,短语ID和短语。 {MSG_CC_002_DeviceReg_MailBody}是需要与列的值进行比较的变量。 因此,如果变量与列中的条目匹配,则应仅返回1。
[编辑:] 这只是我要使用的内容之一,我还有一个变量{MSG_CC_002_DeviceReg_MailSender},该变量将提供要与包含电子邮件地址的类似表进行比较的电子邮件地址。
这可能吗? 如果是这样-怎么办?
答案 0 :(得分:2)
您可以使用join
或子查询:
select count(*)
from t
where exists (select 1
from othertable ot
where {MSG_CC_002_DeviceReg_MailBody} LIKE '%' + ot.phrase + '%'
) ;
答案 1 :(得分:1)
是的,您可以使用动态查询来实现。基本上,您需要将查询构造为字符串然后执行。
您可以在以下链接中找到有关动态查询的示例和更多信息;
https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/
答案 2 :(得分:1)
如果您有很多短语或电子邮件地址,这会很慢,但是它将为您提供所需的内容。
SELECT COUNT(*) AS RetValue
FROM PhraseTable
WHERE {MSG_CC_002_DeviceReg_MailBody} LIKE '%' + phrase + '%';