如何编写 DB2 选择查询以在“-”分隔符之前包含字符串

Posted

技术标签:

【中文标题】如何编写 DB2 选择查询以在“-”分隔符之前包含字符串【英文标题】:How to write a DB2 select query to include the string before the '-' delimiter 【发布时间】: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

【问题讨论】:

【参考方案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, '^[^-]+')

【讨论】:

以上是关于如何编写 DB2 选择查询以在“-”分隔符之前包含字符串的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助以在 DB2 中进行正确的选择查询

如何在卸载作业中为分隔符编写 DB2 SELECT 语句

如何在 ibm_cloud 上的 db2 中编写 sql 查询

如何编写查询以确保电子邮件包含@

如何对查询中的字段进行编程,以在该记录的子数据表中显示逗号分隔的唯一值列表?

如何在 IBM DB2 中的导出结果中也包含列标题