条件语句无法正常工作

时间:2020-05-29 18:05:51

标签: sql sql-server

为什么我总是有“错误”,而从“ if-else”中什么也没有?

DECLARE @Date DATE = '2015-01-01'

BEGIN TRY
    DECLARE @ROZNICA AS INT;
    SET @ROZNICA = DATEDIFF(day, @Date, getdate());

    IF @ROZNICA = 0
    BEGIN
        PRINT 'Data podana w parametrze jest datą bieżącą.';
    END;
    ELSE IF @ROZNICA > 0
    BEGIN
        PRINT 'Między datą obecną a datą ' + getdate() + ' jest ' + @ROZNICA + ' dni różnicy.';
    END;
    ELSE
    BEGIN
        PRINT 'Data podana w parametrze jest większa od bieżacej.';
    END;
END TRY
BEGIN CATCH
    PRINT 'Error';
END CATCH;

我希望从If Else语句中显示一些内容

2 个答案:

答案 0 :(得分:1)

只需更改

'Między datą obecną a datą ' + getdate() + ' jest ' + @ROZNICA + ' dni różnicy.';

PRINT concat('Między datą obecną a datą ', getdate(), ' jest ', @ROZNICA, ' dni różnicy.');

之所以会这样,是因为将datetime转换为varchar时出错。 因此您的代码将是

DECLARE @Date DATE = '2015-01-01'

BEGIN TRY
    DECLARE @ROZNICA AS INT;
    SET @ROZNICA = DATEDIFF(day, @Date, getdate());
    IF @ROZNICA = 0
      BEGIN
        PRINT 'Data podana w parametrze jest datą bieżącą.';
      END --Remove ; from here
    ELSE IF @ROZNICA >0
      BEGIN
        PRINT concat('Między datą obecną a datą ', getdate(), ' jest ', @ROZNICA, ' dni różnicy.');
      END -- Remove ; from here
    ELSE
      BEGIN
        PRINT 'Data podana w parametrze jest większa od bieżacej.';
      END;
END TRY
  BEGIN CATCH
    PRINT 'Error';
  END CATCH;
GO

答案 1 :(得分:0)

未经转换,您无法将日期或整数与varchar并置,因此您需要:

 PRINT 'Między datą obecną a datą ' + cast(getdate() as varchar(10)) + ' jest ' + cast( @ROZNICA  as varchar(5))+ ' dni różnicy.';