如何在 DB2 中获取字符分隔的子字符串?
How to get a character delimited substring in DB2?
我的Table“员工”中有一列“employee_Id”。
employee_Id 有员工姓名和出生日期。例如:
Jason-21996
和 Buttler
请帮我写一个 select 查询,其中 returns Jason
和 Buttler
作为输出。
这是我正在尝试的查询:
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);
对你有用吗?
我的Table“员工”中有一列“employee_Id”。
employee_Id 有员工姓名和出生日期。例如:
Jason-21996
和 Buttler
请帮我写一个 select 查询,其中 returns Jason
和 Buttler
作为输出。
这是我正在尝试的查询:
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);
对你有用吗?