【问题标题】:How to get a character delimited substring in DB2?如何在 DB2 中获取字符分隔的子字符串?
【发布时间】:2021-05-06 10:19:52
【问题描述】:

我的表“Employee”中有一个列“employee_Id”。

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

Jason-21996Buttler

请帮助我编写一个返回 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。

【问题讨论】:

    标签: sql db2 websphere zos


    【解决方案1】:

    按原样运行以下命令。

    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);
    

    它对你有用吗?

    【讨论】:

      【解决方案2】:

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

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

      Here 是一个 dbfiddle。

      【讨论】:

      • SQL 错误 [42884]:未找到具有兼容参数的授权 REGEXP_SUBSTR。 SQLCODE=-440, SQLSTATE=42884, DRIVER=4.9.78
      • @VarshaKumari 您的查询有什么问题?
      • @MarkBarinstein,我已经更新了有问题的错误,请看一下
      • 某些employee_id 的值中可能没有“-”字符。试试substring(employee_Id, 1, LOCATE('-', employee_Id || '-') - 1)
      • @GordonLinoff REGEXP_SUBSTR 即使在 DB2 12 for Z/OS 中也可能不存在。根据链接,它必须在 FL504 才能启用。您提供的链接适用于 Db2 for LUW - 它是具有非常相似的 SQL 函数集的不同产品,但不是 100%。
      猜你喜欢
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多