如何在oracle sql where子句中使用冒号分隔值

时间:2014-12-18 17:48:42

标签: sql oracle oracle-apex

ColA    ColB
1       Testa:testb:Testc:testd

如何根据冒号分隔值中的单个值找到匹配的行?我已尝试过此功能,但它不匹配ColB具有多个嵌入值的行:

Select * from Table
      Where ColB = 'testc' and ColA =1

3 个答案:

答案 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 LINGUISTICchange 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;