如何在 DB2 中获取字符分隔的子字符串?

How to get a character delimited substring in DB2?

我的Table“员工”中有一列“employee_Id”。

employee_Id 有员工姓名和出生日期。例如:

Jason-21996Buttler

请帮我写一个 select 查询,其中 returns JasonButtler 作为输出。

这是我正在尝试的查询:

select substring(employee_Id,1, LOCATE('-',employee_Id) - 1) as Emp_ID from Employee

我看到这个错误:

SQL Error [42815]: THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT 3 OF SUBSTRING IS INVALID. SQLCODE=-171, SQLSTATE=42815, DRIVER=4.9.78

编辑 1:根据@Mark 的建议,我已将查询编辑如下

select substring(employee_Id,1, LOCATE('-',employee_Id || '-') - 1) as Emp_ID from Employee

我遇到了同样的错误。我尝试 运行 LOCATE,发现它返回的索引为 Buttler 的 15,因为列长度为 15。

如果您的 DB2 版本支持正则表达式,那么一个简单的方法是 regexp_substr():

regexp_substr(employee_id, '^[^-]+')

Here 是一个 db<>fiddle.

运行以下原样。

select substring(employee_Id, 1, LOCATE('-', employee_Id || '-') - 1) as Emp_ID 
from 
(
          SELECT 'Jason-21996' FROM SYSIBM.SYSDUMMY1
UNION ALL SELECT 'Buttler'     FROM SYSIBM.SYSDUMMY1
) Employee (employee_Id);

对你有用吗?