C# U-SQL将一列一分为二,以“分隔”-&引用;

C# U-SQL将一列一分为二,以“分隔”-&引用;,c#,sql,split,azure-data-lake,u-sql,C#,Sql,Split,Azure Data Lake,U Sql,我正试图使用data lake analytics中的U-SQL将一列一分为二。在SQL中,可以这样做: ,CASE WHEN [Total] like '%-%' THEN TRIM(LEFT([Total],CHARINDEX('-',[Total]) - 1)) END AS [TotalLeft] ,TRIM(REPLACE(SUBSTRING([Total],CHARINDEX('-',[Total]),LEN([Total])),'-','')) A

我正试图使用data lake analytics中的U-SQL将一列一分为二。在SQL中,可以这样做:

    ,CASE WHEN [Total] like '%-%' 
        THEN TRIM(LEFT([Total],CHARINDEX('-',[Total]) - 1)) END AS [TotalLeft]
    ,TRIM(REPLACE(SUBSTRING([Total],CHARINDEX('-',[Total]),LEN([Total])),'-','')) AS TotalRight
我在U-SQL中尝试了类似的方法,但在U-SQL中似乎不存在LEFT

([Total] LIKE "%-%") ? Left([Total].IndexOf("-"), 1).Trim                   : 0 AS TotalLeft,
我读过关于使用数组和分解的内容,但这似乎只是将其拆分为更多的行,而不是列

此外,我还考虑使用EXTRACT并将分隔符设置为“-”,但这似乎也不是一个选项


有人知道如何有效地解决这个问题吗?谢谢

这应该可以让你开始了。另见


这里有一种使用
拆分
的替代方法。对我来说,这感觉稍微简单一点,但做事总有不止一种方式。除非希望元素显示为行,否则不需要使用
EXPLODE
。如果有两个以上的项需要拆分,那么扩展就更容易了,这要感谢David提供了我重用的示例查询

@data =
    SELECT *
    FROM(
        VALUES
        ( "12-34" )
    ) AS T(col1);


@result =
    SELECT array[0] AS totalLeft,
           array[1] AS totalRight
    FROM
        (
            SELECT new SQL.ARRAY<string>(col1.Split('-')) AS array
            FROM @data
        ) AS x;


OUTPUT @result
TO "/output/result.txt"
USING Outputters.Tsv();
@数据=
挑选*
从(
价值观
( "12-34" )
)AS(col1);
@结果=
选择数组[0]作为TotalEFT,
数组[1]作为totalRight
从…起
(
选择new SQL.ARRAY(col1.Split('-')作为数组
来自@data
)AS x;
输出@result
至“/output/result.txt”
使用Outputters.Tsv();

只是在这里加上我的两分钱。 还有一个更简短的版本

@data = 
SELECT * FROM 
    ( VALUES
    ("12-34")
    ) AS T(col1);

@result =
    SELECT 
    col1.Split('-')[0] AS totalLeft,
    col1.Split('-')[1] AS totalRight
FROM @data;

OUTPUT @result
TO "/Test/result.txt"
USING Outputters.Tsv();

竖起两个大拇指!!太好了,我没想到会有这么快的回复。谢谢你们两位!太好了,我没想到会有这么快的回复。谢谢你们两位!
@data = 
SELECT * FROM 
    ( VALUES
    ("12-34")
    ) AS T(col1);

@result =
    SELECT 
    col1.Split('-')[0] AS totalLeft,
    col1.Split('-')[1] AS totalRight
FROM @data;

OUTPUT @result
TO "/Test/result.txt"
USING Outputters.Tsv();