使用 oracle SQL 28.9 X 30.6 按分隔符位置拆分字符串

问题描述 投票:0回答:1

我有一个字符串,其中 COLUMN DIE_SIZE 包含“48.6 X 90.6”。我想把这个字符串分成size_x和size_y。我只能想办法分割die_y

示例字符串:

DIE_DIZE 48.6×90.6 77.9×57.0 47.0×40.0 57.0×71.0 61.0×80.0 54.5×74.0 42.0×40.0 80.0×85.0

我通过 regexp_substr 编写 SQL,但只能对 DIE_Y 进行子字符串化。 为什么会发生这种情况以及如何解决它?

   select distinct  
                DIE_SIZE   ,
                regexp_substr(replace(replace(DIE_SIZE,' ',''),'x','X'), '[^X]+$', 2, 1) as die_x,
                regexp_substr(replace(replace(DIE_SIZE,' ',''),'x','X'), '[^X]+$', 1, 1) as die_y
                
                from ORD_DIE_LOT
                  

来自 sql 的输出

期待输出

DIE_SIZE DIE_X DIE_Y
48.6×90.6 48.6 90.6
77.9×57.0 77.9 57.0
sql oracle plsql substring regexp-substr
1个回答
0
投票

首先,您必须使用

RECURSIVE CTE
将您的 stping 拆分为单独的行,之后您可以将块拆分为维度。 SQL 下面

with rws as (
    select '48.6 X 90.6 77.9 X 57.0 47.0 X 40.0 57.0 X 71.0 61.0 X 80.0 54.5 X 74.0 42.0 X 40.0 80.0 X 85.0' str from dual
),
sizes as (
select regexp_substr (
    str,
    '[0-9.]+ X [0-9.]+',
    1,
    level
) value
from rws
connect by level <= REGEXP_COUNT(str, 'X')
) SELECT 
    value,
    regexp_substr (
        value,
        '[0-9.]+',
        1,
        1
    ) x,
    regexp_substr (
        value,
        '.[0-9.]+$',
        1,
        1
    ) y
FROM sizes;

在这里您可以尝试和测试 SQL 代码

© www.soinside.com 2019 - 2024. All rights reserved.