DB2 SQL按分隔符拆分记录(如果存在)

58wvjzkj  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(247)

我想返回字符串的一部分 BEFORE 一个分隔符(在本例中是一个连字符)。我发现DB2抛出了一个错误,因为列的值不一致,一些记录有连字符,而另一些没有。所以,如果连字符存在,我想返回连字符之前的字符串,否则就直接返回字符串。
下面显示了COLUMN 1的示例:
| 识别码|第1列|
| - -|- -|
| 一个|ASHJE-JFE公司|
| 2个|QER-SK系统|
| 三个|克赛蒂克|
| 四个|SDJ-EJLF|
我编写了下面的查询来返回字符串previous/before '-',但是,我得到了下面的错误:
未执行该语句,因为标量函数的数值参数超出范围。
我相信这是因为有些记录中没有连字符...

select distinct column1, locate('-',column1), substr(column1,1, (locate('-',column1) - 1)) from db2.table
where column1 is not null
fetch first 25 rows only
with ur

有没有人知道如何完成类似的事情,但返回的字符串时,一个连字符不存在?谢谢!

qcuzuvrc

qcuzuvrc1#

您可以使用以下表达式:

SUBSTR (COLUMN1, 1, COALESCE (NULLIF (LOCATE ('-', COLUMN1), 0) - 1, LENGTH (COLUMN1)))
9jyewag0

9jyewag02#

您可以使用CASE陈述式来搜寻连字符、LIKE运算子和%万用字符。

SELECT ID, column1,
CASE WHEN column1 LIKE '%-%'
THEN substr(column1,1,locate('-',column1)-1)
ELSE column1 
END AS column2
FROM fileName
WHERE column1 IS NOT NULL
FETCH FIRST 25 ROWS ONLY

请参阅Fiddle
结果:
| 识别码|第1列|第2列|
| - -|- -|- -|
| 一个|ASHJE-JFE公司|阿什杰|
| 2个|QER-SK系统|快速响应|
| 三个|克赛蒂克|克赛蒂克|
| 四个|SDJ-EJLF| SDJ公司|

相关问题