使用sql检查它是否为零的值

时间:2014-01-30 15:10:04

标签: sql postgresql

我有一个值列在下面的列

{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

感谢您的帮助

1 个答案:

答案 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;

但是,此专栏建议您的数据结构已损坏。您应该将这些值存储在单独的表中。一行包含三个数据值(帐户,已使用和剩余),并为帐户重复行。