小编Gar*_*y_W的帖子

REGEX从列表中选择第n个值,允许空值

REGEXP_SUBSTR()用来从逗号分隔列表中返回第n个值.这在所有值都存在时工作正常,但如果项为null则失败.这是一个适用于所有值存在的示例,我选择第二次出现的不是逗号的1个或多个字符:

SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data
  2  from dual;

D
-
2
Run Code Online (Sandbox Code Playgroud)

但是当第二个值为null时,我真的得到列表中的第三个项目,当然这实际上是第二个出现的1个或多个不是逗号的字符.但是,我需要它返回NULL,因为第二项是空的:

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data
  2  from dual;

D
-
3
Run Code Online (Sandbox Code Playgroud)

如果我将正则表达式更改为允许零个或多个字符而不是1或更多,则对于超过null的数字也会失败:

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data
  2  from dual;

D
-
3
Run Code Online (Sandbox Code Playgroud)

我需要允许null但似乎无法使语法正确.从逻辑上讲,我需要返回逗号第n次出现之前的数据是否存在(并允许最后一个值).有任何想法吗?

regex sql oracle plsql oracle11g

5
推荐指数
1
解决办法
3568
查看次数

从 Oracle Select 中的字符串中检索前 X 个单词

我需要选择字符串中的前 X 个单词,其中 x 可以是 0-100 之间的任何数字。是否有捷径可寻?我找到了以下示例来从字符串中选择前 2 个单词:

select regexp_replace('Hello world this is a test', '(\w+ \w+).*$','\1') as first_two
from dual
Run Code Online (Sandbox Code Playgroud)

如何从字符串中选择前 X 个单词,其中 X 可以是 0-100 之间的数字?

oracle regexp-substr regexp-replace

5
推荐指数
1
解决办法
1万
查看次数

一个 Execute Immediate 语句可以嵌套在另一个 Execute Immediate 中吗

我有一个存储过程,其中 Execute Immediate 将调用“Begin ... End”块,其中包含另一个 Execute Immediate,只有在满足特定条件时才会调用该块。

"Begin... End clock" 内部的 Execute Immediate 命令用单引号括起来。所以它看起来像

BEGIN
...SOME STUFF HERE...

FOR ..... LOOP
EXECUTE IMMEDIATE
           'BEGIN
              IF (condition) THEN
                     EXECUTE IMMEDIATE 'DML STRING'
              END IF
            END;'

END LOOP;

END;
Run Code Online (Sandbox Code Playgroud)

这就引出了另一个问题,是否可以从循环内调用 Execute Immediate 语句。我认为答案是肯定的。

oracle plsql stored-procedures dynamic-sql

0
推荐指数
1
解决办法
1070
查看次数

如何检查无效字符?甲骨文SQL

寻找方法从 Oracle SQL 中的 StudentID 中过滤掉特殊符号、字母等,并将这些记录显示为无效。

过滤掉字母 aZ 和其他字符的最佳方法是什么?(只留下数字)

SELECT replace(Translate(studentid,'a-Z<>!-\+=/&', '??'),'?','') as StudentID, 'Invalid Characters in Student ID' 
FROM students
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

0
推荐指数
1
解决办法
866
查看次数