1

我在Ms SQL Server2005 年(2008 年)有以下结构的表格

ID Name     AddDate                   AmendDate                 Status
-----------------------------------------------------------------------
1  Jason    2012-09-03 08:01:00.000   2012-09-03 14:02:00.000   Amended
2  Robert   2012-09-03 08:05:00.000   NULL                      New
3  Celia    2012-09-03 08:10:00.000   2012-09-03 14:02:00.000   Amended
4  Jason    2012-09-03 14:02:00.000   NULL                      New
5  Robert   2012-09-03 14:03:00.000   2012-09-03 20:02:00.000   Amended
6  Celia    2012-09-03 14:07:00.000   2012-09-03 20:02:00.000   Amended
7  Jason    2012-09-03 20:00:00.000   NULL                      New
8  Robert   2012-09-03 20:02:00.000   NULL                      New
9  Celia    2012-09-03 20:04:00.000   NULL                      New

例行程序每天运行三次作为快照,

请问如何使用 SQL Query

  1. 选择任何一天早上(或晚上)的所有记录

  2. 如果我在历史中ISNULL(AmendDate, '2012.09.04')行走AmendDateNull value例如返回所有行AddDate <= '2012-09-01' and AmendDate >= '2012-09-02'

  3. 问题SELECT - FROM - WHERE -只是

4

3 回答 3

1

对于第一个,您可以在日期上使用DATEPART函数来提取小时,并应用您的标准来判断您是否对早上或晚上添加的记录感兴趣。

DATEPART(hh, AddDate) BETWEEN 0 AND 12 -- Morning.

第二个问题不清楚:(

于 2012-09-04T07:22:06.460 回答
1

对于 2. 问题,你想要这样的东西吗?我使用了一个参数,因为它更容易显示:

  DECLARE @AddDate datetime

    SELECT *
    FROM yourTable
    WHERE 
    AddDate <= @AddDate 
    and AmendDate >= ISNULL(AmendDate,DATEADD(day, 1, @AddDate))
于 2012-09-04T07:35:56.917 回答
1

从早上/晚上选择任何一天的所有记录

select *
from Table t
where t.AddDate > '2012-09-03' 
      and t.AddDate < '2012-09-04'
      and DatePart(HOUR, t.AddDate) < 12 -- Morning
      -- and DatePart(HOUR, t.AddDate) > 18 -- Evening

对于第二部分(鉴于要求不是很清楚),我认为您可以将Coalesce函数与CTE

;WITH FullData(Id, Name, AddDate, AmendDate, Status)
     AS (SELECT t.Id,
                t.Name,
                t.AddDate,
                COALESCE(t.AmendDate, '2012-09-04'),
                Status
         FROM   Table t)
SELECT *
FROM   FullData d
WHERE  d.AddDate <= '2012-09-01'
       AND t.AmendDate >= '2012-09-02' 
于 2012-09-04T07:40:09.557 回答