oracle 表列值的字符串修改

uxhixvfz  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(90)

我需要一个从'abc xyz-1234''xyz, abc'的列值的字符串的解决方案。对于上述解决方案,Oracle SQL查询将是什么?

SELECT   SUBSTR (COLUMN_NAME,
                 INSTR (' ', COLUMN_NAME) + 1,
                 LENGTH (5) - SUBSTR ('%[^a-z,A-Z, ]%', COLUMN_NAME) - 1)
       + ','
       + SUBSTR (COLUMN_NAME, 1, INSTR (' ', COLUMN_NAME) - 1)
  FROM table_name;

我在Oracle SQL中得到无效数字错误。

ukdjmx9f

ukdjmx9f1#

或者,检查正则表达式是否适合您的需要。
样本数据:

SQL> with test (col) as
  2    (select 'abc xyz-1234' from dual)

查询方式:

3  select regexp_substr(col, '\w+', 1, 2) ||', '||
  4         regexp_substr(col, '\w+', 1, 1) as result
  5  from test;

RESULT
--------
xyz, abc

SQL>
c7rzv4ha

c7rzv4ha2#

您可以用途:

SELECT SUBSTR(column_name, spos + 1, hpos - spos - 1)
       || ','
       || SUBSTR(column_name, 1, spos - 1) AS formatted_column_name
FROM   (
  SELECT column_name,
         INSTR(column_name, ' ') AS spos,
         INSTR(column_name, '-') AS hpos
  FROM   table_name
);

或者,使用正则表达式(输入较少,但可能会更慢):

SELECT REGEXP_REPLACE(column_name, '^(.*?) (.*?)-.*$', '\2,\1')
         AS formatted_column_name
FROM   table_name

其中,对于样本数据:

CREATE TABLE table_name (column_name) AS
  SELECT 'abc xyz-1234' FROM DUAL;

两个输出:
| 格式列名称|
| --|
| xyz,abc|
fiddle

相关问题