我想在u-sql的if条件中使用“> =”,但变量在字符串中

问题描述 投票:0回答:1

我正在使用u-sql代码,如果条件需要在其中使用,但字符串中有一个问题@day,因此,我无法使用“> =”条件,如果可以,可以对其进行转换工作,但所有这些外部变量都来自数据工厂,因此在这里我无法将其更改为int。

DECLARE EXTERNAL @month string = "10";
DECLARE EXTERNAL @day string = "30";
DECLARE EXTERNAL @tableName string = "COST";
DECLARE EXTERNAL @additionalParameters string = "O&R";
DECLARE EXTERNAL @input_path string = "/test/Staging/";
DECLARE EXTERNAL @output_path string = "/test/MasterData/";
DECLARE EXTERNAL @hour string = "01";
DECLARE EXTERNAL @minute string = "01";
DECLARE EXTERNAL @second string = "01"; 


DECLARE @inputFilePath string = @input_path + @tableName + "_" + @additionalParameters + ".csv";

DECLARE @uniqueCalMonthOutputFilePath = @output_path + @tableName + "/" + @tableName  + "_" + @additionalParameters + "_CalMonthFile.tsv";


DECLARE @temp = DateTime.Parse(String.Concat(@year,"/", @month, "/", @day));

DECLARE EXTERNAL @monthPrev string = Convert.ToDateTime(@temp).AddMonths(-1).ToString("MM");
DECLARE EXTERNAL @yearPrev string = Convert.ToDateTime(@temp).AddYears(-1).ToString("yyyy");

IF (@day >= 01 @day >= 12) THEN

DECLARE @ingestOutputFilePath string = @output_path + @tableName + "/monthno=" + @monthPrev + "/dayno=" + @day + "/" + @tableName + "_" + @additionalParameters + "_" + @year + "." + @monthPrev + "." + @day + "." + @hour + @minute + @second +"test.tsv";

ELSE

    DECLARE @ingestOutputFilePath string = @output_path + @tableName + "/monthno=" + @month + "/dayno=" + @day + "/" + @tableName + "_" + @additionalParameters + "_" + @year + "." + @month + "." + @day + "." + @hour + @minute + @second +"test.tsv";
END;


@getExtract =  
      EXTRACT 
            [Division_Plant_Code] string,
            [Version Name] string,
            [Version Code] string,
            [Cost Center Code] string,
            [Cost Element Code] string,
            [CalMonth] string,
            [Cost] string,
            [Currency] string,
            [Functional Area Code] string 
      FROM @inputFilePath
      USING Extractors.Text(skipFirstNRows : 1,delimiter: '|');

@uniqueCalMonth =
      SELECT DISTINCT
            [CalMonth],
            [CalMonth].Substring(0, 4) AS Year_of_CalMonth,
            [CalMonth].Substring(4, 2) AS Month_of_CalMonth
      FROM @getExtract;

OUTPUT @uniqueCalMonth
    TO @uniqueCalMonthOutputFilePath
USING Outputters.Text(outputHeader : true,delimiter:'|');

OUTPUT @getExtract
    TO @ingestOutputFilePath
USING Outputters.Tsv(outputHeader : true);

azure azure-data-lake u-sql
1个回答
0
投票

您可以使用内联函数表达式来实现转换,例如正如@iakobski正确建议的那样,您可以简单地使用Int.parse将其转换为整数格式。

@result = 
    SELECT
        EmpID,
        EmpName,
        (
            (Func<string, DateTime?>)
            (dateString =>  // input_paramater
                { 
                    DateTime dateValue;
                    return DateTime.TryParse(dateString, out dateValue) ? (DateTime?)dateValue : (DateTime?)null;
                }
             )
        ) (StartDate) AS validated_StartDate
    FROM @employees;

OUTPUT @result
TO "/Output/ReferenceGuide/DDL/Functions/inlineFunctionExpression.csv"
USING Outputters.Csv(outputHeader: true);

附加参考:

https://docs.microsoft.com/en-us/u-sql/ddl/functions

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.