Ric*_*ard 2 c# sql split azure-data-lake u-sql
我试图通过在数据湖分析中使用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
Run Code Online (Sandbox Code Playgroud)
我在U-SQL中尝试了类似的东西,但似乎在U-SQL中不存在LEFT.
([Total] LIKE "%-%") ? Left([Total].IndexOf("-"), 1).Trim : 0 AS TotalLeft,
Run Code Online (Sandbox Code Playgroud)
我读到了使用数组和EXPLODE,但这似乎只是将它分成更多行而不是列.
此外,我正在考虑使用EXTRACT并将分隔符设置为" - ",但这似乎也不是一个选项.
任何人都对如何有效地解决这个问题有任何想法?谢谢!
这是一种替代方法Split
.对我来说感觉稍微简单一些,但总有不止一种方法可以做.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();
Run Code Online (Sandbox Code Playgroud)