我需要使用 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新手,似乎没有更多的帮助似乎来自前数据库维护者。
有人可以提出建议吗?
感谢。
答案 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