Sql server SQL Server-仅当记录的日期为空时才排除值的查询
我有一张这样的桌子。我正在使用SQLServerAzure。我试图返回所有不是红色且没有绘制日期的颜色-日期为空Sql server SQL Server-仅当记录的日期为空时才排除值的查询,sql-server,Sql Server,我有一张这样的桌子。我正在使用SQLServerAzure。我试图返回所有不是红色且没有绘制日期的颜色-日期为空 CREATE TABLE [dbo].[COLORS] ( [ID] [INT] IDENTITY(1,1) NOT NULL, [COLOR] [VARCHAR](10) NULL, [DATE_PAINTED] [SMALLDATETIME] NULL, CONSTRAINT [PK_COLORS] PRIMARY KEY CL
CREATE TABLE [dbo].[COLORS]
(
[ID] [INT] IDENTITY(1,1) NOT NULL,
[COLOR] [VARCHAR](10) NULL,
[DATE_PAINTED] [SMALLDATETIME] NULL,
CONSTRAINT [PK_COLORS]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[COLORS] ON
INSERT [dbo].[COLORS] ([ID], [COLOR], [DATE_PAINTED])
VALUES (1, N'RED', CAST(N'2000-01-01T00:00:00' AS SmallDateTime)),
(2, N'BLUE', CAST(N'2000-01-01T00:00:00' AS SmallDateTime)),
(3, N'GREEN', NULL),
(4, N'PURPLE', CAST(N'2000-01-01T00:00:00' AS SmallDateTime)),
(5, N'BLACK', NULL),
(6, N'WHITE', CAST(N'2000-01-01T00:00:00' AS SmallDateTime)),
(7, N'ORANGE', CAST(N'2000-01-01T00:00:00' AS SmallDateTime)),
(8, N'YELLOW', CAST(N'2000-01-01T00:00:00' AS SmallDateTime)),
(9, N'RED', NULL)
SET IDENTITY_INSERT [dbo].[COLORS] OFF
查询应返回除红色
和日期(空
显然,这是行不通的:
SELECT *
FROM COLORS
WHERE COLOR <> 'RED' AND DATE_PAINTED IS NOT NULL
选择*
从颜色
其中颜色“红色”和绘制日期不为空
正确/最佳的查询是什么。表中还有25000多条记录。这是您想要的吗
SELECT *
FROM COLORS
WHERE NOT (COLOR = 'RED' AND DATE_PAINTED IS NULL);
没有NOT
的等效逻辑(假设COLOR
从不NULL
)为:
SELECT *
FROM COLORS
WHERE COLOR <> 'RED' OR DATE_PAINTED IS NOT NULL;
选择*
从颜色
颜色“红色”或涂日期不为空;
您可以使用以下查询
SELECT *
FROM [dbo].[COLORS]
WHERE COLOR <> 'RED' OR DATE_PAINTED IS NOT NULL;
选择*
来自[dbo]。[颜色]
颜色“红色”或涂日期不为空;
这取决于您想要的是除ID为1的行以外的所有内容,还是除第9行以外的所有内容,或者是我没有从您的问题中解释的内容 除了ID为1的行之外的所有内容-其中红色和涂日期不为空
SELECT * FROM dbo.COLORS
WHERE (COLOR<>'RED') OR (DATE_PAINTED IS NULL);
从dbo.COLORS中选择*
其中(红色)或(涂色日期为空);
除了第9行的颜色是红色,日期是空的,这和@Gordon Linoff建议的一样
SELECT * FROM dbo.COLORS
WHERE (COLOR<>'RED') OR (DATE_PAINTED IS NOT NULL);
从dbo.COLORS中选择*
其中(颜色为“红色”)或(涂色日期不为空);
请向我们展示您期望的结果。查询显然不起作用是什么意思?