代码之家  ›  专栏  ›  技术社区  ›  Johnny Da Costa

usql-sql.array获取长度?

  •  2
  • Johnny Da Costa  · 技术社区  · 7 年前

    在上下文中,我从一个传感器获取数据,它存储在这样的字符串中

    "axes" : "...,1,23,21,0,12,10,212,12,..."
    

    大小可能会根据发送数据的机器而改变…所以我的目标是像SQL.array那样存储它,我想在以后获得这个数组的大小,以执行一些业务报告。

    有没有办法找到sql.array的长度?

    @outputfile =
        SELECT m.MachineID,
               COUNT( * ) AS nbAxesArray
        FROM MachineInfos AS m
             JOIN
                 LoadDataAxes AS lda
             ON m.EventIoTID == lda.EventIoTID
             //WHERE getLength(lda.L) == 0 // something like this
        GROUP BY m.MachineID;
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   wBob    7 年前

    sql.array complex type有许多方法,例如 count and implements ieNumberable under the hood*。一个简单的例子:

    @输入= 选择* (100,“1,23,21,0,12,10212,12”), //将字符串转换为数组 来自@input; @输出= 交叉应用 @输出= 输出@输出
    
    
    

    我的结果:

    其他一些示例here。有帮助吗?

    DECLARE @outputFile string = @"output/output.csv";
    
    @input =
        SELECT *
        FROM ( VALUES 
            ( 100, "1,23,21,0,12,10,212,12" ),
            ( 101, "7,8,9" )
             ) AS x(rowId, y);
    
    
    // Convert the string to array
    @working =
        SELECT rowId, new SQL.ARRAY<string>(y.Split(',')) AS z
        FROM @input;
    
    
    /*
    // Explode the array to individual rows
    @output =
        SELECT b
        FROM @working
             CROSS APPLY
                 EXPLODE(z) AS a(b);
    */
    
    @output =
        SELECT rowId, z.Count AS c
        FROM @working;
    
    
    OUTPUT @output
    TO @outputFile
    USING Outputters.Csv(quoting:false);
    

    *(我想)

    Results

    here.有帮助吗?