【发布时间】:2015-11-25 11:22:18
【问题描述】:
我的数据库有一个表“事件”。列包括“名称”、“日期”和“类型” 我想运行一个返回给定日期和类型的所有事件名称的查询。
首先,我如何使用 DATEPART 来分解日期并让它按年份来识别。
【问题讨论】:
-
请标记使用的 dbms。 (DATEPART 不是 ANSI SQL...)
我的数据库有一个表“事件”。列包括“名称”、“日期”和“类型” 我想运行一个返回给定日期和类型的所有事件名称的查询。
首先,我如何使用 DATEPART 来分解日期并让它按年份来识别。
【问题讨论】:
假设您使用的是 SQL Server,并且您的“日期”列是 DATE 或 DATETIME 数据类型,您可以这样做:
SELECT GETDATE() -- i.e. will return 2015-11-25 11:27:27.700
SELECT DATEPART(YEAR,GETDATE()) -- returns 2015
因此,例如,您获取 2015 年所有事件的查询可能如下所示:
SELECT Name, Date, Type
FROM Events
WHERE DATEPART(YEAR,Date) = 2015
AND TYPE = <your type condition>
ORDER BY Date;
【讨论】:
如果您使用 'datepart' 函数,它将为数据库中的每一行调用,这可能会很昂贵。
最好使用范围选择年份,然后它可以使用索引在您的数据库中搜索相关行。
select * from Events where [Date]>='1 jan 2015' and [Date]<'1 jan 2016' and [type]=1
【讨论】: