当前位置: 首页 > 知识库问答 >
问题:

如何在DB2中基于特定分隔符拆分字符串,而无需创建存储过程

锺离逸春
2023-03-14

下面是DB2中名为“Person\u Info”的varchar列。我需要使用“\u0”拆分its值,并在DB2中获取第三个标记。然后将其转换为整数。

Person_Info
----------------
Person_BILL_1234_1511011900
Person_BOB_88888
Person_MARIOSAN_10_1511011900

输出应为:

1234
88888
10

我已经检查了这篇文章如何在DB2中根据分隔符拆分字符串值。它并没有真正解决这种特殊情况。

我们还检查了这篇文章,它在DB2中拆分了一个VARCHAR来检索其中的值,但它需要创建一个存储过程。我不能在生产环境中为一些实用功能创建一个存储过程。

目前,我尝试了:

Select INTEGER(
    SUBSTR(
        Person_Info, LOCATE('_', Person_Info, 10) + 1, 2
    )
) from PersonTable

但它只适用于“Person\u MARIOSAN\u 10\u 1511011900”。

那么,有什么解决方案可以在不创建任何存储过程的情况下实现这一点吗?特别是如果解决方案不绑定任何硬编码值,如10或2,那么它将在我提供的所有三个示例中工作。

共有1个答案

扶冠宇
2023-03-14

我没有访问DB2的权限来检查它,但它应该可以工作,或者很容易适应:

CREATE TABLE PersonTable(Person_Info VARCHAR(1000));

INSERT INTO PersonTable(Person_Info)
SELECT 'Person_BILL_1234_1511011900'  union all
SELECT 'Person_BOB_88888'  union all
SELECT 'Person_MARIOSAN_10_1511011900';

查询:

SELECT LEFT(sub.r, LOCATE('_', CONCAT(sub.r, '_'))-1) AS result
FROM (
  SELECT RIGHT(Person_Info, LENGTH(Person_Info) - 
                            LOCATE( '_',Person_Info, LOCATE('_', Person_Info)+1)) AS r
  FROM PersonTable
  ) AS sub

SqlFiddleDemo

工作原理:

  1. 在子查询中,我从第二个字符开始得到正确的结果

假设您在开始时始终有Person\uuuuuu:

SELECT Person_Info,
 LEFT(RIGHT(Person_Info, LENGTH(Person_Info) - LOCATE('_', Person_Info, 8)),
            LOCATE('_', CONCAT(RIGHT(Person_Info, LENGTH(Person_Info) 
                                                - LOCATE('_', Person_Info, 8))
                        ,'_')
                  )-1)
           AS result
FROM PersonTable

SqlFiddleDemo2

输出:

╔════════════════════════════════╦════════╗
║          Person_Info           ║ result ║
╠════════════════════════════════╬════════╣
║ Person_BILL_1234_1511011900    ║   1234 ║
║ Person_BOB_88888               ║  88888 ║
║ Person_MARIOSAN_10_1511011900  ║     10 ║
╚════════════════════════════════╩════════╝
 类似资料:
  • 我正在尝试拆分字段(在某个分隔符“;”)并将结果插入表中。最大值为5个子字符串,由“;”分隔。最多只有5个水果。如果只有水果列,如何拆分字符串以获得单独的水果。如果果数少于5,其余列将返回NA。 我首先创建了新列并将其全部设置为null。我尝试了以下代码,但它不起作用,如果水果比列少,其余列将只取最后一个水果的值而不是null。 是否还有其他信息可用于拆分字符串?

  • 问题内容: 如何将逗号分隔的字符串拆分为存储过程中的字符串,并将其插入表字段中? 使用Firebird 2.5 问题答案: 这里有一个示例如何分割字符串并将子字符串写入表中:

  • 我是 Perl 的新手,但根据我阅读的文档,看起来 Perl 中的 split 函数要求正则表达式模式而不是字符串分隔符作为第一个参数,但我发现使用 之类的东西仍然可以正确拆分字符串。 基于此,我尝试使用可变分隔符(例如。< code>print (split($var,$ string))[0] where < code > $ var = ' ' )并发现它不起作用。我做错了什么? 谢谢! 编

  • 问题内容: 我有一个。所选(选中)的项目存储在中。 例如,选择的值超过7天 我正在转换为以逗号分隔的,即 现在,我将此值作为字符串传递给存储过程。我想触发查询,如: 我的问题是:如何在存储过程中分离字符串? 问题答案: 如果传递逗号分隔(任何分隔符)的字符串来存储过程并在查询中使用,那么必须吐出该字符串,然后才能使用它。 下面有例子:

  • 我有输入字符串'~~'作为分隔符。 例如:字符串s=“1~~vijay~~25~~pune”;当我在Java中用'~\\~'拆分它时,它工作得很好。 还有其他人面临同样的问题吗?请就这个问题发表评论。

  • 为什么下面的bash代码不起作用? 预期产出: