基本上我不希望用户在表格中插入过去已经插入的日期。
我的查询在下面的情况下工作,但在一种情况下它会失败,并且在查询中我返回一个整数值,如果它大于0然后我不允许用户输入日期。
在数据库中已插入的日期为:
以下案例
Start Date End Date
Case 1) 1 march 2016 23 march 2016 working
Case 2) 1 june 2016 15 june 2016 working
Case 3) 15 april 2016 15 may 2016 NOT working
日期时间格式为:yyyy-mm-dd hh:mm:ss
这是我的查询
SELECT
COUNT(1) AS [A1]
FROM
[dbo].[CandidateExperience]
WHERE
([CandidateID] = 50)
AND ([CandidateExperienceID] <> 118)
AND ([DeletedBy] IS NULL)
AND (NOT ((('2015-04-15 00:00:00' <[StartDate]) OR ('2015-04-15 00:00:00' > [EndDate]))
OR (('2015-04-30 00:00:00' > [EndDate]) OR ('2015-04-30 00:00:00'< [StartDate]))))
答案 0 :(得分:4)
你的source('script.R')
逻辑有点搞砸了。当你拥有OR
中的那些时,它最终意味着如果其中任何一个为真,那么整个事物将被评估为假 - 这意味着你不会得到任何行。我也不确定你为什么要查看你的日期,因为它们与你的测试用例不符。
相反,请尝试:
NOT
答案 1 :(得分:2)
这是另一种使用子查询的方法,因此您可以定义现有记录的日期范围,并确认所有记录都不在该范围内。
SELECT
COUNT(1) AS [A1]
FROM [dbo].[CandidateExperience] C
WHERE ([CandidateID] = 50)
AND ([CandidateExperienceID] <> 118)
AND ([DeletedBy] IS NULL)
AND NOT EXISTS (
SELECT *
FROM (
SELECT CONVERT(DATE, '4/1/2016') AS [D1], CONVERT(DATE, '4/30/2016') AS [D2]
UNION ALL SELECT CONVERT(DATE, '5/1/2016') AS [D1], CONVERT(DATE, '5/31/2016') AS [D2]
) Existing (StartDate, EndDate)
WHERE (C.StartDate <= Existing.EndDate AND C.EndDate >= Existing.StartDate)
-- Assumes C.StartDate <= C.EndDate and that C.StartDate and C.EndDate do not have times (all 12am)
)