使用分隔符搜索 varchar 列中的每个标记 [关闭]

Posted

技术标签:

【中文标题】使用分隔符搜索 varchar 列中的每个标记 [关闭]【英文标题】:Search each token in a varchar column split with a delimiter [closed] 【发布时间】:2013-10-10 06:00:47 【问题描述】:

我有一个表格,其中包含由; 分隔的电子邮件地址的列:

TO                                              CC                                  BCC
--------------------------------------------------------------------------------------------------------------------
abc.def@xyz.com;an.yes@xyz.com;no.yes@xyz.com   anna.chris@xyz.com;DL_ABC@xyz.com   raj.alb@xyz.com;doug.amb@xyz.com

用户提供一个电子邮件地址作为搜索条件,我必须查找这些列中的每一列以找到任何列具有目标电子邮件地址的行。

谁能帮帮我?

我尝试使用reg_exp,但没有太多经验。

【问题讨论】:

请展示你的尝试。 试试INSTR,而不是reg_exp。 【参考方案1】:

简单的方法:

SELECT * FROM emailtable
WHERE INSTR(';' || to || ';' || cc || ';' || bcc || ';'
           ,';' || :search_parameter || ';') > 0;

【讨论】:

嗨,杰弗里,感谢您的输入,我可以得到输出。但是这里有一点复杂性。用户可以选择输入开头/包含/结尾。用户可能没有完整的电子邮件地址。我们可以使用 % 字符吗?我们可以修改查询吗? 在这种情况下,您需要解析列 - 请参阅 ***.com/questions/4004377/…【参考方案2】:

根据您的要求以及我从您对 Jeffery Kemp 回答的评论中得到的信息,我建议您尝试以下操作:

SELECT *
  FROM emailtable
 WHERE lower(REPLACE ("TO" || ';' || cc || ';' || bcc, ' ', ''))
       LIKE '%' || lower(REPLACE (:search_parameter, ' ', '')) || '%'

lower 函数帮助我们进行不区分大小写的搜索。 REPLACE 消除了空格。

我希望这能给你一个线索。这是通过 to、cc 和 bcc 列搜索电子邮件 ID 的一部分的最简单方法。请根据您的要求修改WHERE 条件。

【讨论】:

嗨 Rachcha,您的方法的问题是,如果该列包含分号和电子邮件之间的空格,则它不起作用。 您的搜索字符串是什么?你能给我一些示例搜索字符串吗? 嗨 Rachcha,如果用户给出条目,请考虑列 to=cc=bcc= " Syed.hussain@xyz.com ; Rajesh.S.Prabhu@xyz.com ; d.Saus@xyz.com " d.saus 和标准以开头 在您的案例中,用户输入和条件有什么区别? 假设用户不知道完整的邮件 ID,但他知道电子邮件以 d.saus/syed/Rajesh 开头。所以他给出 d.saus/syed/Rajesh 并选择一个具有标准的下拉列表开始于/包含/结束于。在这种情况下,开始于

以上是关于使用分隔符搜索 varchar 列中的每个标记 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Oracle 中的字符串中循环标记?

Excel搜索Word是否在列A中的某个位置以及列B中

Oracle SQL:为列中的每个值创建一个新行,其中更多值用逗号分隔

如何用另一个表中的匹配值替换/更新列中每个字符串的所有实例?

如何从一列中查找每个值并使用“;”返回电子邮件地址分隔器

使用全文本搜索 (FTS) 在多个列中搜索多个标记,使用 OR 运算符