【发布时间】:2015-08-15 01:09:02
【问题描述】:
我正在使用 Oracle 11g。
我将多个值存储在由分隔符 (#@#) 分隔的列中。我知道这是错误的数据库设计,但由于它已使用多年,我对此无能为力。 我需要执行搜索操作,在其中传递多个值,如果存储值中的任何一个值匹配,我应该获取所有记录。我阅读了有关此类场景的正则表达式。 有人可以指导我如何进行吗?提前致谢。
谢谢
【问题讨论】:
-
你能给我们一些示例数据和表格布局吗?如果可以的话,我希望你能把它放在sqlfiddle.com
-
在 MSSQL 中,如果我知道可能的搜索词的最大数量,我将使用
WHERE (Col LIKE '%#@#'+SearchTerm1 +'#@#%' OR SearchTerm1 Is NULL) AND (Col LIKE '%#@#'+SearchTerm2 +'#@#%' OR SearchTerm2 Is NULL)..... 对于未知数量的搜索词,然后我将填充一个临时表并加入它..SELECT * FROM YourTable AS A INNER JOIN #STerms AS B on A.Col LIKE '%#@#'+B.STerm+'#@#%'.. -
请注意,我的回答是对您如何使用分隔符进行假设。例如如果您在只有一个值时不使用分隔符,那么您需要考虑如何处理各种场景,因为根据您在其中存储的值,它们都有自己的弱点。
-
sqlfiddle.com/#!9/9273b/1/0 请参考此链接...我期待所有 Portfolio1 所在的记录。
-
也许我不明白你在做什么,但你不能用like来查询吗?从项目组合中选择 *,例如 '%Portfolio1%'
标签: sql plsql many-to-many plsqldeveloper