检索一系列日期

时间:2016-03-08 16:42:58

标签: sql sql-server-2008

我需要使用 SQL Server Management studio 在我们的某个数据库中检索一些日期的某些事件类型。

E.g。

104 Card printed    14/11/2015
205 Broken Attract Loop 15/11/2015
 56 Card printed    15/11/2015
245 Broken Attract Loop 16/11/2015

我正在努力查看2016年1月26日至29日的日期。

我问过一位正在维护数据库的同事,他已经给我发了这个:

Select 
    count(e.eventstart),    
    convert(e.eventstart),      
    et.eventtype
From 
    tblevents e, tbleventtype et
Where 
    et.eventypeid = e.eventtypeid
    And et.eventtype in ('field1','field2')
Group by 
    convert (e.eventstart), et.eventtype

关于将时间和日期分离为eventstart的内容记录如下:2009-01-17 16:48:58.000。

我无法做出头脑或尾巴;我是一个完整的SQL新手,似乎没有更多的帮助似乎来自前数据库维护者。

有人可以提出建议吗?

感谢。

2 个答案:

答案 0 :(得分:0)

在SQL Server 2008中,您只需转换为日期:

Select count(e.eventstart), convert(date, e.eventstart),      
       et.eventtype
From tblevents e Join
     tbleventtype et
     on et.eventypeid = e.eventtypeid
Where et.eventtype in ('field1','field2')
Group by convert(date, e.eventstart), et.eventtype
Order by convert(date, e.eventstart), et.eventtype;

您应该告知您的同事明确JOIN是编写SQL代码的正确方法。这种语法比在FROM子句中使用逗号(概念上)创建笛卡尔积,然后使用WHERE子句进行过滤,这种语法更强大,更具表现力。

答案 1 :(得分:0)

试试这个:

Select 
    count(e.eventstart),    
    cast(e.eventstart as date) [eventstart],      
    et.eventtype
From 
    tblevents e, tbleventtype et
Where 
    et.eventypeid = e.eventtypeid
    And et.eventtype in ('field1','field2')
    And cast(e.eventstart as date) between '2016-01-26' and '2016-02-29'
Group by 
    cast(e.eventstart as date), et.eventtype