基于另一个值 SQL Server 的计算字段

时间:2021-04-21 15:53:55

标签: sql-server if-statement azure-sql-database

我在 Azure SQL 服务器中有一个表,其中有一个值和一个日期。

CREATE TABLE [dbo].[example] (
  [Value] varchar(50) NULL,
  [Date] date NULL
)

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'A', N'2020-04-01')
GO

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'A', N'2020-04-01')
GO

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'B', N'2020-04-03')
GO

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'C', N'2020-04-03')
GO

我对 MySQL 的经验有限,并且对修改后的语句有困难。 在这个数据库中,我需要根据该值计算一个新日期。

我知道如何使用以下语句进行 Dateadd。

SELECT
    example.[Value],
    example.[Date], 
    DATEADD(day, 10, example.[Date]) AS NewDate
FROM
    dbo.example

但它会将日期添加到所有内容中。我已经阅读了 if else 语句,但这就是我无法得到结果的地方。

我需要的是如果值在 (B, C) 中,它应该只添加 10 天,否则在当前日期字段中添加 20 天。如何将 If 语句设置为适用于每一行,因为如果我使用这背后的逻辑,它会返回多个结果并且将无法工作

2 个答案:

答案 0 :(得分:0)

您可以使用 SQL Server 中的 if 且 only if 语句来完成此操作。 https://www.w3schools.com/sql/func_sqlserver_iif.asp

它看起来像这样:

SELECT
    example.[Value],
    example.[Date], 
    IIF(Value IN ('B','C'), DATEADD(day, 10, example.[Date]), DATEADD(day, 20, example.[Date])) AS NewDate
FROM
    dbo.example

答案 1 :(得分:0)

您可以在大多数 SQL 方言中使用 CASE 语句:

    SELECT
        example.[Value],
        example.[Date], 
    CASE WHEN example.[Value] IN ('B', 'C'), 
         THEN DATEADD(day, 10, example.[Date])
         ELSE DATEADD(day, 20, example.[Date])
         END AS NewDate 
    FROM
        dbo.example
相关问题