【问题标题】:How to write a DB2 select query to include the string before the '-' delimiter如何编写 DB2 选择查询以在“-”分隔符之前包含字符串
【发布时间】:2021-05-04 14:22:47
【问题描述】:

我的“学院”表中有一个“部门”列。部门有类似的数据

Commerce1-683877
Science2-678900

我需要编写一个仅返回 Commerce1 和 Science2 的选择查询。

我是 DB2 的新手,请帮我解决这个问题。

select substring(department,0,CHARINDEX('-',department) as DEPT from College 

编辑-1:谢谢@Charles

我尝试了您的解决方案:
select substring(department , 1, LOCATE('-',department) - 1) AS DEPT from College

但它给我一个错误:

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

编辑2:你是对的@Charles,我所有的行都不包含'-' 我也尝试使用以下查询,但得到相同的错误:

select substring(department,1, LOCATE('-',department || '-') - 1) as DEPT from College

【问题讨论】:

    标签: sql db2 substring


    【解决方案1】:

    什么平台和版本的 Db2?

    您是否在寻找合适的 Db2 SQL 参考手册?

    注意 Db2 SQL 字符串和数组从 1 开始,而不是 0。

    select substring(department,1, LOCATE('-',department) - 1) as DEPT from College

    【讨论】:

    • 感谢@Charles,我正在使用 DB2 z/OS。请看看我的编辑一次
    • 听起来并非所有行都有'-'
    • 是的。我试过 ||运算符,但它不起作用,给出同样的错误
    • 它对我有用,我使用 substr 和相同的查询。谢谢@Charles
    【解决方案2】:

    一种方法使用regexp_substr()

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多