我有一个值列在下面的列
{200;0;7713;200;43;7670;200;0;7713
所以这些值在逻辑上分为三个部分......如下所示
200; 0; 7713
第一个数字 200 显示帐户ID,第二个值 0 显示从该帐户使用,第三个 7713 值显示剩下的,我的目标是:
如果使用大于零,则选择剩余,如下例所示:
此帐户中的所有其他值都为零,但中间的值不是这样的情况在这种情况下我想选择 7670 的值作为之前的值不是零。
帐户ID不固定意味着有时会生成1,2,4甚至4次,如下所示:
{200;25;6713
{200;0;7713;200;45;9670
{200;0;7713;200;43;8670;200;0;7713
{200;0;7713;200;43;8670;200;0;7713;200;0;7713
感谢您的帮助
答案 0 :(得分:1)
您可以使用split_part()
select (case when split_part(col, ';', 2) <> '0' then split_part(col, ';', 3)
when split_part(col, ';', 5) <> '0' then split_part(col, ';', 6)
when split_part(col, ';', 8) <> '0' then split_part(col, ';', 9)
when split_part(col, ';', 11) <> '0' then split_part(col, ';', 12)
end)
from t;
但是,此专栏建议您的数据结构已损坏。您应该将这些值存储在单独的表中。一行包含三个数据值(帐户,已使用和剩余),并为帐户重复行。