Between 子句在查询中未给出所需结果
Between clause not giving desired results in query
我需要 return 来自基于 datetime2 的 mssql 存储过程的结果。有一名员工 table 有上班和下班时间。我需要 return 根据开始时间和结束时间从员工那里得到所有数据。我的查询有点像
Select *
from employee
where empid ='123'
and punchin between 'starttime' and 'endtime'
and punchout between 'starttime' and 'endtime'
此查询不是return预期的结果。我在这里做错了什么吗,在打入或打出之间,一列可以为空,在这种情况下,结果将在一列的基础上 returned。
基于假设:
Table 结构:
CREATE TABLE employee (
empid VARCHAR(20) not null,
punchin datetime2(7),
punchout datetime2(7)
)
示例数据:
INSERT INTO employee VALUES
('1', null, '2021-03-28 10:50:00'),
('2', '2021-03-28 05:00:00', '2021-03-28 9:00:00'),
('3', '2021-02-28 05:00:00', null)
程序:
CREATE PROCEDURE getData
@empid VARCHAR(20),
@startTime datetime2(7),
@endTime datetime2(7)
AS
BEGIN
SELECT *
FROM employee
WHERE empid = @empid
AND (punchin IS NULL OR (punchin IS NOT NULL AND punchin >= @startTime))
AND (punchout IS NULL OR (punchout IS NOT NULL AND punchout <= @endTime))
END
用法:
EXEC getData '1', '2021-03-27 10:50:00', '2021-03-27 10:50:00'
看看它是否有效。
注意:没有适当的结构或数据,很难根据假设做事。
我需要 return 来自基于 datetime2 的 mssql 存储过程的结果。有一名员工 table 有上班和下班时间。我需要 return 根据开始时间和结束时间从员工那里得到所有数据。我的查询有点像
Select *
from employee
where empid ='123'
and punchin between 'starttime' and 'endtime'
and punchout between 'starttime' and 'endtime'
此查询不是return预期的结果。我在这里做错了什么吗,在打入或打出之间,一列可以为空,在这种情况下,结果将在一列的基础上 returned。
基于假设:
Table 结构:
CREATE TABLE employee (
empid VARCHAR(20) not null,
punchin datetime2(7),
punchout datetime2(7)
)
示例数据:
INSERT INTO employee VALUES
('1', null, '2021-03-28 10:50:00'),
('2', '2021-03-28 05:00:00', '2021-03-28 9:00:00'),
('3', '2021-02-28 05:00:00', null)
程序:
CREATE PROCEDURE getData
@empid VARCHAR(20),
@startTime datetime2(7),
@endTime datetime2(7)
AS
BEGIN
SELECT *
FROM employee
WHERE empid = @empid
AND (punchin IS NULL OR (punchin IS NOT NULL AND punchin >= @startTime))
AND (punchout IS NULL OR (punchout IS NOT NULL AND punchout <= @endTime))
END
用法:
EXEC getData '1', '2021-03-27 10:50:00', '2021-03-27 10:50:00'
看看它是否有效。
注意:没有适当的结构或数据,很难根据假设做事。