分层字符串结构x.y.z查询

时间:2016-01-04 12:04:12

标签: sql oracle

所以我得到了一个字符串x.y.z,我希望与数据库中的字段进行比较。 但是如果我在数据库字段中找不到字符串,我想测试查找x.y而不是x,如果找不到x.y。

如果字符串可以是x-leaf long,是否可以在查询中执行此操作?

2 个答案:

答案 0 :(得分:1)

使用LIKE(即WHERE 'x.y.z' LIKE 'x.y%')或INSTR()(即WHERE INSTR('x.y.z', 'x.y') = 1)查找匹配的行,然后进行最长的匹配:

SELECT *
FROM   (
  SELECT   t.*
  FROM     table_name t
  WHERE    'x.y.z' LIKE t.VALUE || '%'
  ORDER BY LENGTH( t.VALUE ) DESC
)
WHERE ROWNUM = 1;

答案 1 :(得分:0)

这是一种方法

select t.*
from (select t.*
      from t
      where t.col like 'x.%'
      order by (case when t.col = 'x.y.z' then 1
                     when t.col like 'x.y.%' then 2
                     else 3
                end)
     ) t
where rownum = 1;