表列值的字符串修改

String modification for table column values

提问人:Amol Salunke 提问时间:10/3/2023 最后编辑:LittlefootAmol Salunke 更新时间:10/3/2023 访问量:29

问:

我需要一个来自列值的字符串的解决方案,例如 to 。 上述解决方案的 Oracle SQL 查询是什么。'abc xyz-1234''xyz, abc'

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 中收到 Invalid number 错误。

字符串 oracle substr sql-function

评论


答:

0赞 MT0 10/3/2023 #1

您可以使用:

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;

两个输出:

FORMATTED_COLUMN_NAME
XYZ,ABC公司

小提琴

0赞 Littlefoot 10/3/2023 #2

或者,检查正则表达式是否适合您的需求。

示例数据:

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>