私は2つのテーブルを持っています:
Holiday
とEmpLog
に存在しない日付のみを選択する必要がありますEmplog
(これらの日は平日であり、休日のみとは異なります)
たとえば、この日はログに記録していません:2012年12月18日。
したがって、出力は2012年12月18日になります
私は2つのテーブルを持っています:
Holiday
とEmpLog
に存在しない日付のみを選択する必要がありますEmplog
(これらの日は平日であり、休日のみとは異なります)
たとえば、この日はログに記録していません:2012年12月18日。
したがって、出力は2012年12月18日になります
あなたはこのようなものを意味します
select column1
from thistable
left join otherTable on
thisTable.column1 = otherTable.column1
Where thisTable.column1 IS NULL
質問から、私は次のことを仮定します:
これらの仮定が正しければ、このコードは機能します。
--Declare variables to hold date values
DECLARE @MyDate DATETIME,
@FirstDate DATETIME,
@LastDate DATETIME
SELECT @MyDate = Getdate() -- OR Pass whatever date you want
--Populate variable with values of first date and last date of the given month
SELECT @FirstDate = CONVERT(VARCHAR(25), Dateadd(dd, -( Day(@mydate) - 1 ),
@mydate),
101),
@LastDate = CONVERT(VARCHAR(25), Dateadd(dd, -( Day(
Dateadd(mm, 1, @mydate)) ),
Dateadd(mm, 1, @mydate)),
101)
--Declare table variable to hold date values for the entire month
DECLARE @AllDates TABLE
(
datevalue DATETIME
)
DECLARE @Lastday INT
SET @Lastday = Datepart(d, @LastDate)
DECLARE @Days INT
SET @Days = 1
-- Populate table variable with all days of the month
WHILE @Days <= @Lastday
BEGIN
INSERT INTO @AllDates
SELECT @FirstDate
SET @FirstDate = Dateadd(d, 1, @FirstDate)
SET @Days = @Days + 1
END
--Query joining the EmpLog table and Holiday Table, using Left Outer Join
SELECT AD.datevalue
FROM @AllDates AD
LEFT OUTER JOIN emplog EL
ON AD.datevalue = EL.datevalue
LEFT OUTER JOIN holiday H
ON AD.datevalue = H.datevalue
-- Where clause to return only dates that do not appear in EmpLog or Holiday tables
WHERE EL.datevalue IS NULL
AND H.datevalue IS NULL
お役に立てれば。
ラジャン