SQL Server where子句具有空列
我有一个SQL Server where子句具有空列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个Employee表,它的工作原理是,当添加新员工时,[DOR]列将为空,[Status]列将为1。当员工被解除公司职务时,[DOR]列值将是他/她离开公司的日期,[Status]设置为0 我需要获取给定日期内所有可用员工的详细信息。必须将状态为1的员工以及在该日期之前尚未解除职务的员工带走 但我不能像与DOR相等时那样,将其值设为null,并且不返回任何行 如果我以2015-02-10的形式给出输入,它应该获取两条记录,而当我给出2015-02-15时,它应该只获取第一条记录 CREA
Employee
表,它的工作原理是,当添加新员工时,[DOR]
列将为空,[Status]
列将为1。当员工被解除公司职务时,[DOR]
列值将是他/她离开公司的日期,[Status]
设置为0
我需要获取给定日期内所有可用员工的详细信息。必须将状态为1的员工以及在该日期之前尚未解除职务的员工带走
但我不能像与DOR
相等时那样,将其值设为null,并且不返回任何行
如果我以2015-02-10
的形式给出输入,它应该获取两条记录,而当我给出2015-02-15
时,它应该只获取第一条记录
CREATE TABLE [Employee]
(
[EmployeeId] [int] IDENTITY(1000,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[RoleId] [int] NOT NULL,
[Email] [varchar](50) NULL,
[Contact] [varchar](50) NULL,
[DOJ] [date] NOT NULL,
[DOR] [date] NULL,
[Status] [bit] NOT NULL,
[Salary] [decimal](18, 2) NULL
)
INSERT [dbo].[Employee] ([EmployeeId], [Name], [RoleId], [Email], [Contact], [DOJ], [DOR], [Status], [Salary])
VALUES (1001, N'Employee 1', 3, N'', N'', CAST(0x8D390B00 AS Date), NULL, 1, CAST(6000.00 AS Decimal(18, 2)))
INSERT [dbo].[Employee] ([EmployeeId], [Name], [RoleId], [Email], [Contact], [DOJ], [DOR], [Status], [Salary])
VALUES (1002, N'Employee 2', 7, N'', N'', CAST(0x8D390B00 AS Date), CAST(0x9A390B00 AS Date), 0, CAST(4000.00 AS Decimal(18, 2)))
像这样的
select
EmployeeId,
Name
from
Employee
where
DOJ <= @searchDate and
(DOR is null or DOR > @searchDate)
选择
雇员ID,
名称
从…起
雇员
哪里
DOJ@searchDate)
像这样的东西
select
EmployeeId,
Name
from
Employee
where
DOJ <= @searchDate and
(DOR is null or DOR > @searchDate)
选择
雇员ID,
名称
从…起
雇员
哪里
DOJ@searchDate)
试试这个:
SELECT * FROM Employee
WHERE @dateOfSearch BETWEEN DOJ and COALESCE(DOR, '2099-12-31')
这个查询的作用是检查搜索日期是否在开始日期和结束日期之间。如果结束日期为null
,则使用COALESCE
函数获取非常高的值日期。尝试以下操作:
SELECT * FROM Employee
WHERE @dateOfSearch BETWEEN DOJ and COALESCE(DOR, '2099-12-31')
这个查询的作用是检查搜索日期是否在开始日期和结束日期之间。如果结束日期为null
,则使用COALESCE
函数获取非常高的值日期。您需要在您的条件下使用is null
运算符,而不是=null
,如下所示:
SELECT *
FROM Employee
WHERE DOJ <= '2015-02-15'
AND (DOR IS NULL OR DOR > '2015-02-15')
选择*
来自员工
其中美国司法部“2015-02-15”)
在您的条件下,您需要使用IS NULL
运算符,而不是=NULL
,如下所示:
SELECT *
FROM Employee
WHERE DOJ <= '2015-02-15'
AND (DOR IS NULL OR DOR > '2015-02-15')
选择*
来自员工
其中美国司法部“2015-02-15”)
前面答案的另一个变体:-)
先前答案的另一个变体:-)
哦,非常感谢,伙计!在过去的两个小时里,我一直在为这个挠头。哦,非常感谢,伙计!在过去的两个小时里,我一直在为这个挠头。