云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

企业网站_我的世界rpg服务器_企业级

小七 141 0

简介

在我上一篇文章(在saphana中使用SQL将字符串拆分为多行)中,我演示了如何将变量字符串值拆分为多行。在这篇文章中,我想重点介绍类似的场景,但这次的挑战将是对表列而不是变量执行相同的操作。SAP HANA启用STRING\u AGG函数,将多行中的值连接到单个字符串中,但是执行相反的操作非常具有挑战性。

场景

在我的场景中,我将使用包含联系人详细信息的测试表。其结构如下:

现有联系人表有PHONE_NUMBERS列,该列存储逗号分隔的号码。其目的是将电话号码显示为单独的行,并保留源表中的其他联系人信息。单个电话号码长度可能不同,每个记录的电话号码计数也可能不同。

将列值拆分为多行

要实现将列值拆分为多行的逻辑,需要执行以下步骤

在这一步中,我将使用字符串函数,它允许区分值和逗号分隔的值字符串。为此,我将使用SUBSTR\u REGEXPR SQL函数。此函数允许基于正则表达式从特定字符串检索子字符串。它还允许指定要显示的匹配子字符串的出现处。

下面的表达式允许检索除逗号以外的任何字符字符串的第一个出现处

知道在我的场景中,物联网是学什么的,单个值中最多有3个电话号码串联在一起,大数据风控,让我们为剩余号码添加表达式:

查询:

结果:

在这一步中,我们要定义单个字符串中电话号码值的最大数目。为此,我将使用REGEXPR函数来计算字符串中分隔符的数量。

然后我将添加+1,西安大数据,因为逗号的数量总是比字符串中电话号码的数量少1:

现在我们已经计算了每个字符串的电话号码出现次数。

查询:

结果:

最后我想看看最大值要知道,我需要生成多少行。此值将分配给变量MAX\u NR\u occurrents,并将在步骤3中使用。为了创建变量,我使用匿名块:

查询:

为每条记录生成多行,我将交叉连接联系人表和一系列3条记录(因为在我的情况下,字符串中最多有3个电话号码)。为了生成N条记录,我使用了SERIES\u generate\u INTEGER函数。第二步中定义的变量将作为该函数的输入参数,用于定义要生成的记录数:

查询:

结果:

现在让我们用第一步中的结果集交叉连接序列。这样,小企业管理软件免费,每条记录将被复制3次:

查询:

结果:

在这一步中,我们将应用最终的查询调整,大数据,将可分辨的电话号码从列移动到连续的行。为了实现这一点,我们可以使用SERIES\u GENERATE\u INTEGER函数中的ELEMENT\u NUMBER列,该函数为特定联系人内的每一行返回连续的数字。此列将由引用参数使用。通过在ELEMENT\ u NUMBER列中有连续的数字,我们可以动态地将分隔的值逐个地子串,并将它们显示在连续的行中。我们还需要记住,最初我们为每条记录生成了三行,所以最后我们还需要过滤掉空行(对于字符串中电话号码少于3个的情况)

查询:

结果:

摘要

这篇文章是为了给出拆分表列和生成多行的建议解决方案,同时也强调了将字符串函数与正则表达式结合使用的强大功能。