【发布时间】:2012-04-06 03:56:10
【问题描述】:
问题:
select STR1 from T1 where STR2 = 'NAME1'
在上面的查询中,STR1 可以是 {ABC, ABC_1, ABC_2,..., MNO, XYZ, XYZ_1...}。
假设我有以下输出
ABC_1
MNO
XYZ
现在我想提取所有匹配 STR1 且包含 _# 之前的部分。例如,上面示例数据集的预期输出是:
ABC
ABC_1
ABC_2
MNO
XYZ
XYZ_1
请注意,每个 STR1 的 STR2 始终是唯一的。
代码方面,我想像以下这样的事情:
SELECT
STR1
FROM
T1
WHERE
STR1
LIKE '% (truncate_underscore_part(select STR1 from T1 where STR2 = 'NAME1')) %'
有什么想法吗?
第一个解决方案:
select t1.str1
from (
select case when instr( str1, '_' ) > 0
then substr( str1, 1, instr( str1, '_' ) - 1 )
else str1
end prefix
from t1 where str2 = 'NAME1'
) prefix_list,
t1
where t1.str1 like prefix || '%'
【问题讨论】:
-
你用的是oracle还是mySql?
-
您的第一个查询的输出示例仅显示不带下划线的项目,但我是否从您的描述中了解到第一个列表也可能包含“ABC_1”等,并且您想要在继续匹配之前剥离字符串的 _# 部分?
-
为什么这个标签既是Oracle又是MySQL???
-
我不太明白你的意思。如果我对您的理解正确,您有一个表格,其中包含格式为
something和something_n的字段。给定什么样的输入,你想要什么样的输出? -
@MichaelFredrickson 我正在使用 oracle。