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