【问题标题】:Calculated fields based on another value SQL Server基于另一个值 SQL Server 的计算字段
【发布时间】:2021-04-21 15:53:55
【问题描述】:

我在 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 语句设置为适用于每一行,因为如果我使用其背后的逻辑,它会返回多个结果并且它将无法工作

【问题讨论】:

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


    【解决方案1】:

    您可以使用 SQL Server 中的 if 且仅 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
    

    【讨论】:

    • 谢谢,这很有帮助。看起来我把括号弄乱了
    • @Herr_Bruder 你得到答案了吗?我在您之前的帖子中看到您遇到了语法错误。你能告诉我你的查询吗?请特别注意所需的逗号和括号,因为您的错误消息表明您的金额不正确。 IIF(CONDITION,[IF TRUE], [IF FALSE])
    • 是的,我做了,你的例子有效。我相信我最初写了类似“IIF Value IN...”的内容,没有 IIF 函数的括号。一个菜鸟的错误。 CASE 函数为我生成了一个错误。我现在也可以使用该方法,但使用 OR 函数而不是列表。
    【解决方案2】:

    您可以在大多数 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
    

    【讨论】:

    • 我尝试了你和 Jerrit 的答案,这个给出了一个错误。 > [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]',' 附近的语法不正确。 (102)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2010-09-15
    • 2013-09-05
    • 2010-12-23
    相关资源
    最近更新 更多