表
ColA ColB
1 Testa:testb:Testc:testd
如何根据冒号分隔值中的单个值找到匹配的行?我已尝试过此功能,但它不匹配ColB具有多个嵌入值的行:
Select * from Table
Where ColB = 'testc' and ColA =1
答案 0 :(得分:1)
使用like
:
Select *
from Table
Where (':' || ColB || ':' like '%:testc:%') and ColA = 1;
答案 1 :(得分:1)
作为戈登真正好答案的补充,根据你的例子,区分大小写可能是一个问题。
如果您的数据只包含没有变音符号或重音的普通字母,那么使用UPPER
就足够了:
Select *
from Table
Where (':' || UPPER(ColB) || ':' like UPPER('%:testc:%')) and ColA = 1;
对于更高级的用法以及最新版本的Oracle(10g版本2或更高版本),您可以set NLS_COMP
to LINGUISTIC
和change the NLS_SORT
settings使当前会话使用不区分大小写你的选择。举个例子:
ALTER SESSION SET NLS_COMP=LINGUISTIC;
ALTER SESSION SET NLS_SORT=FRENCH_CI;
Select *
from Table
Where (':' || ColB || ':' like '%:testc:%') and ColA = 1;
请参阅http://sqlfiddle.com/#!4/d41d8/38999或说明我的观点的示例。
答案 2 :(得分:1)
FWIW你也可以使用INSTR:
Select *
from Table
Where INSTR(':' || ColB || ':', ':testc:') > 0 and ColA = 1;