仅显示 otbi 报告中值列表中最后一个连字符之前的数据

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

有一栏是部门名称。部门名称由名称、连字符和部门编号组成。在某些情况下,部门名称中也包含连字符。因此,一个值中最多有 2 个连字符。我需要创建两个单独的列,部门名称和部门编号。

我能够使用正确的函数分隔部门编号,因为部门编号始终是 5 个数字。然而,部门名称是我无法弄清楚的。

reporting-services oracle-sqldeveloper business-intelligence
1个回答
0
投票

通常,如果号码始终为 5 位数字,则:

  • 名称是除去最后6个字符的子字符串;和
  • 数字是包含最后 5 个字符的子字符串。

在 Oracle 中,您可以使用:

SELECT department_name,
       SUBSTR(department_name, 1, LENGTH(department_name) - 6) AS name,
       SUBSTR(department_name, -5) AS department_number
FROM   departments;

对于样本数据:

CREATE TABLE departments (department_name VARCHAR(200));

INSERT INTO departments (department_name) VALUES ('accounting-00001');
INSERT INTO departments (department_name) VALUES ('human-resources-00002');

输出:

DEPARTMENT_NAME 姓名 DEPARTMENT_NUMBER
会计-00001 会计 00001
人力资源-00002 人力资源 00002

甲骨文小提琴


在 SQL Server 中,您可以使用:

SELECT department_name,
       SUBSTRING(department_name, 1, LEN(department_name) - 6) AS name,
       SUBSTRING(department_name, LEN(department_name) - 4, 5) AS department_number
FROM   departments;

哪个输出:

部门名称 名字 部门编号
会计-00001 会计 00001
人力资源-00002 人力资源 00002

SQL Server 小提琴

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