我在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}
所以,帮助我动态地做到这一点
答案 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;
将其删除:
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");
}