从oracle

时间:2017-10-10 11:05:11

标签: sql oracle

我在oracle中进行查询,我必须使用col1中指定的col1更新col2,因此col1中的数据是动态的,即可以有任何no。 / 所以我想...... Col2从col1的最后一个斜杠更新为修剪值。

输入

Col1        Col2
a          data
a/bb        data
a/b/c      data
a/bbc/c/d/    data

输出

   Col1        Col2
    a          data
    a/b        data/a
    a/b/c      data/a/b
    a/bbc/c/d/    data/a/bbc/c

我尝试使用regexp_substr来做它,但它是动态的。我的查询仅适用于这样的一个或两个斜杠[^ /] {1}

所以,帮助我动态地做到这一点

2 个答案:

答案 0 :(得分:1)

对于您提供的数据,这可以满足您的需求:

update t
    set col2 = col2 || '/' || substr(col1, 1, -2);

我怀疑这可能不是您正在寻找的一般解决方案。

编辑:

我一直认为应该有更好的方法,但这应该有效:

update t
    set col2 = col2 || '/' || substr(col1, 1, length(col1) - coalesce(length(regexp_substr(col1, '/[^/]*$', 1, 1)), 0));

是的,更简单的版本是:

update t
    set col2 = col2 || '/' || regexp_replace(col1, '/[^/]*$', '')

答案 1 :(得分:1)

您可以使用SUBSTR查找字符的最后一次出现,并使用CREATE TABLE table_name ( Col1, Col2 ) AS SELECT 'a', 'data' FROM DUAL UNION ALL SELECT 'a/b', 'data' FROM DUAL UNION ALL SELECT 'a/b/c', 'data' FROM DUAL UNION ALL SELECT 'a/b/c/d', 'data' FROM DUAL UNION ALL SELECT 'a/b/c/d/ef', 'data' FROM DUAL; 将其删除:

SQL Fiddle

Oracle 11g R2架构设置

SELECT col1,
       RTRIM(
         col2 || '/' || SUBSTR( col1, 1, INSTR( col1, '/', -1 ) - 1 ),
         '/'
       ) AS col2
FROM   table_name

查询1

|       COL1 |         COL2 |
|------------|--------------|
|          a |         data |
|        a/b |       data/a |
|      a/b/c |     data/a/b |
|    a/b/c/d |   data/a/b/c |
| a/b/c/d/ef | data/a/b/c/d |

<强> Results

if (inputNumber > gameNumber)
{
    Console.WriteLine("Higher");
}

if (inputNumber < gameNumber)
{
    Console.WriteLine("Lower");
}