相关疑难解决方法(0)

在Oracle中将字符串拆分为多行

我知道这已经在某种程度上得到了PHP和MYSQL的回答,但我想知道是否有人可以教我最简单的方法将字符串(逗号分隔)拆分为Oracle 10g(最好)和11g中的多行.

表格如下:

Name | Project | Error 
108    test      Err1, Err2, Err3
109    test2     Err1
Run Code Online (Sandbox Code Playgroud)

我想创建以下内容:

Name | Project | Error
108    Test      Err1
108    Test      Err2 
108    Test      Err3 
109    Test2     Err1
Run Code Online (Sandbox Code Playgroud)

我已经看到了一些围绕堆栈的潜在解决方案,但是它们只占了一个列(以逗号分隔的字符串).任何帮助将不胜感激.

sql string oracle plsql tokenize

98
推荐指数
6
解决办法
23万
查看次数

将varchar拆分为Oracle中的单独列

我有点不好意思:我被要求从数据库中的特定字符串开始接收注释,并将结果分成不同的列.

例如 - 如果返回的值是这样的:

COLUMN_ONE
--------------------
'D7ERROR username'
Run Code Online (Sandbox Code Playgroud)

回报需要是:

COL_ONE    COL_TWO
--------------------
D7ERROR   username   
Run Code Online (Sandbox Code Playgroud)

一旦结构集的结构只是为了将字符串拆分为两个,是否可以定义列?

sql oracle

21
推荐指数
2
解决办法
13万
查看次数

将“regexp_substr”(Oracle)转换为 PostgreSQL

我在 Oracle SQL 中有这样的查询:

       select town_name, 
              regexp_substr(town_name, '[^A,]+', 1, 1) as c1,
              regexp_substr(town_name, '[^A,]+', 1, 2) as c2, 
              regexp_substr(town_name, '[^A,]+', 1, rownum) as c_rownum,
              rownum
          from epr_towns
Run Code Online (Sandbox Code Playgroud)

结果的前 2 行是:

VALGANNA        V   LG  V   1
VARANO BORGHI   V   R   R   2
Run Code Online (Sandbox Code Playgroud)

我需要在 PostgreSQL 上获得相同的结果(对于带有 的行regexp_substr(town_name, '[^A,]+', 1, rownum) as c_rownum),但我不知道如何实现。你可以帮帮我吗?谢谢。

oracle postgresql rownum regexp-substr

6
推荐指数
2
解决办法
2万
查看次数

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-分割字符串逗号分隔(字符串包含空格和连续逗号)

我找不到有关如何在ORACLE中拆分逗号分隔字符串的解决方案.搜索了很多,没有什么适用于我的情况

DECLARE
  TYPE T_ARRAY_OF_VARCHAR IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
  MY_ARRAY T_ARRAY_OF_VARCHAR;
  MY_STRING VARCHAR2(2000) := '12 3,456,,abc,def';
BEGIN
 FOR CURRENT_ROW IN (
    with test as    
      (select MY_STRING from dual)
      select regexp_substr(MY_STRING, '[^,]+', 1, rownum) SPLIT
      from test
      connect by level <= length (regexp_replace(MY_STRING, '[^,]+'))  + 1)

  LOOP
   DBMS_OUTPUT.PUT_LINE('>' || CURRENT_ROW.SPLIT || '<');
   --DBMS_OUTPUT.PUT_LINE(CURRENT_ROW.SPLIT);
    MY_ARRAY(MY_ARRAY.COUNT) := CURRENT_ROW.SPLIT;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('Array Size:' || MY_ARRAY.COUNT);
END;
Run Code Online (Sandbox Code Playgroud)

/

输出是:

>12 3<
>456<
>abc<
>def<
><
Array Size:5
Run Code Online (Sandbox Code Playgroud)

空值无序!!!!

sql oracle plsql split

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

使用空格和字符将字符串拆分为Oracle中的分隔符和regexp_substr

我正在尝试用regexp_subtr拆分字符串,但我无法使它工作.

所以,首先,我有这个查询

select regexp_substr('Helloworld - test!' ,'[[:space:]]-[[:space:]]') from dual
Run Code Online (Sandbox Code Playgroud)

非常好地提取我的分隔符 - 空白 - 空白

但是,当我尝试使用此选项拆分字符串时,它只是不起作用.

select regexp_substr('Helloworld - test!' ,'[^[[:space:]]-[[:space:]]]+')from dual
Run Code Online (Sandbox Code Playgroud)

查询什么都不返回.

将非常感谢帮助!谢谢

regex sql oracle string-split regexp-substr

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

REGEXP_SUBSTR圆括号

我想用分号分隔的字符串分成PL/SQL的部分.只要字符串中没有圆括号,它就可以正常使用REGEXP_SUBSTR.

例:

select REGEXP_SUBSTR('A;B;C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,3)
from dual;
Run Code Online (Sandbox Code Playgroud)

预期的结果是:ABC

A; B(1); C的结果应该是AB(1)C,但我得到的是:AB 1

select REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,3)
from dual;
Run Code Online (Sandbox Code Playgroud)

这意味着'('被检测为分隔符,但我不明白这种行为.有人可以开导我吗?

regex oracle plsql regexp-substr

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

Plsql分割字符串的最佳方法

从字符串中提取单词的最佳方法是什么?我已经做了一些事情,因为我找到了许多方法,但没有一个看起来"简单".

我们假设有一个名为'change_opening_hours'的程序.此过程具有名为"v_perioden"的时间范围字符串输入.

这个字符串看起来像:

'10:00-12:00'

'10:00-12:00 14:00-16:00'

'10:00-12:00 14:00-16:00 18:00-22:00'

现在我已经自己做了一些事情来从这个输入中抽出每一段时间.

  v_perioden   VARCHAR2(50) := '10:00-12:00 14:00-18:00 22:00-24:00';
  ...
  -- loop though time-periode depeningd
  -- on amount of spaces
  FOR i IN 0..REGEXP_COUNT(v_perioden, ' ') LOOP
    -- first period
    IF i = 0 THEN DBMS_OUTPUT.PUT_LINE(SUBSTR(v_perioden, 0, 11));
    -- second period
    ELSIF i = 1 THEN DBMS_OUTPUT.PUT_LINE(SUBSTR(v_perioden, 13, 11));
    --thirt period
    ELSIF i = 2 THEN DBMS_OUTPUT.PUT_LINE(SUBSTR(v_perioden, 25, 11));
    END IF;
  END LOOP;
Run Code Online (Sandbox Code Playgroud)

输出:

10:00-12:00
14:00-18:00
22:00-24:00
Run Code Online (Sandbox Code Playgroud)

现在这种方式工作正常,但它不是那么有能力.我试图找出如何从空间中的字符串中提取单词,但这并没有成功.

sql oracle plsql

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