2014-12-05 55 views
0

仅在今天的日期才需要获取指定的记录(其中结果为通过且结果为失败)。这样做的最好方法是什么?仅为今天获取指定记录sql

SELECT 
    A.EmployeeNumber, 
    A.Result, 
    FROM AssessmentData A 
WHERE A.Result = 'PASS' OR A.Result = 'FAIL' AND A.TrainingStartDate = GETDATE() 

以上是还没有应用

亲切的问候

回答

2

试试这个:

SELECT 
    A.EmployeeNumber, 
    A.Result 
FROM AssessmentData A 
WHERE A.Result IN ('PASS','FAIL') 
     AND A.TrainingStartDate >= dateadd(Day, DateDiff(Day, 0, GetDate()), 0) 
     And A.TrainingStartDate < dateadd(Day, DateDiff(Day, 0, GetDate()), 1) 

这里有几个问题。 GetDate()返回日期和时间,所以...除非培训开始日期将当前日期和时间与毫秒相匹配,否则您将无法获取数据。

另外,在where子句中将AND与OR混合时要小心。操作顺序非常重要,因此您应该始终使用括号。请注意,我将您的状况改为IN状态。以下查询与我已发布的查询相同。

SELECT 
    A.EmployeeNumber, 
    A.Result 
FROM AssessmentData A 
WHERE (A.Result = 'PASS' or A.Result = 'FAIL') 
     AND A.TrainingStartDate >= dateadd(Day, DateDiff(Day, 0, GetDate()), 0) 
     And A.TrainingStartDate < dateadd(Day, DateDiff(Day, 0, GetDate()), 1) 

注意上面的代码中的括号。它迫使OR'd条件与其他AND条件分开评估。