我需要根據datetime2從mssql存盤程序中回傳結果。有一個雇員表,有打卡和打卡時間。我需要在開始時間和結束時間的基礎上回傳一個雇員的所有資料。我的查詢是這樣的
Select *
from employee
where empid ='123'
and punchin between 'starttime'/span> and 'endtime'
and punchout between 'starttime'/span> and 'endtime'
這個查詢沒有回傳預期的結果。我是不是做錯了什么,在打入或打出之間,第一列可以是空的,在這種情況下,結果將在一列的基礎上回傳。
uj5u.com熱心網友回復:
基于假設:
表結構:
CREATE TABLE employee (
empid VARCHAR(20) not null,
punchin datetime2(7)。
punchout datetime2(7)
)
示例資料:
INSERT INTO employees VALUES
('1'/span>, null, '2021-03-28 10:50:00'/span>),
('2'/span>, '2021-03-28 05:00:00'/span>, '2021-03-28 9:00:00'/span>)。
('3'/span>, '2021-02-28 05:00:00'/span>, 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'/span>, '2021-03-27 10: 50:00', '2021-03-27 10: 50:00'.
看看,它是否有效。
注意:如果沒有適當的結構或資料,就很難根據假設做事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/314837.html
標籤:
