我有一个日志时间数据类型在表中的“日志”列,我想选择“上周”,“2周前”等范围内的我的记录!我该怎么做呢?如何根据日期范围从db中选择记录?
回答
SELECT * from table WHERE LOGTS > '2009-01-01';
的作品。推断。你也可以投它:
SELECT CAST('1900-01-04 00:00' AS datetime);
我假设SQL Server在这里与T-SQL。他们有functions这样做的东西,比如获取当前时间和增加负值7天。
SELECT * from table WHERE logts > DATEADD(day, -7, CURRENT_TIMESTAMP);
此外,它可以帮助您为LOGTS列编制索引。
而且,当您将上述查询的执行计划与下面的查询进行比较时,我相信您会发现上述查询更简单快捷。
SELECT * FROM aTable WHERE DATEDIFF(week, LOGTS, GETDATE()) <= 2
dlamblin的回答是一个好的开始。大多数数据库都有一个getdate()函数和一个dateadd()函数,您可以使用它们来创建要查找的偏移量。将getdate()的结果存储在变量中,然后使用dateadd()创建相对于当前日期的范围。
在您的查询中,您可以使用“between”运算符或简单的大于/小于运算符来查询数据。
注上BETWEEN:一些(?最重要)的实现是包容性。根据您存储和比较的日期/时间值的粒度,午夜值可能会产生意外结果。 如果这是一个问题,大于/小于号运营商可能是要走的路。 – TSomKes 2009-07-01 04:45:36
看来,你需要从过去的几周x直到今天的数据。如果是这样,这应该工作:
SELECT * FROM aTable WHERE DATEDIFF(week, LOGTS, GETDATE()) <= 2
这里我选择数据从2个星期前,直到现在。
SELECT * FROM myData
where LOGTS > dateadd(day,-7,current_date())
这将从今天的日期过去7天。
更改dateadd(day,-7,current_date())
语法,无论sysdate分钟7天语法是否在您的数据库风格。
明显DATEADD
和DATEDIFF
答案常常忘了时间组件,这需要符合在一天或一周开始(例如,午夜星期日或上午8时星期一),从早期的第一天,否则行会错过的定义(例如,在上午9点和下午2点运行时给出不同的结果)。
这些四舍五入计算将及时发现各点:
SET NOCOUNT ON;
DECLARE @pointInTime datetime;
SET @pointInTime= GETDATE();
SELECT
@@DATEFIRST AS FirstDayOfWeek,
DATEADD(hour, DATEDIFF(hour, 0, @pointInTime), 0) AS StartOfHour,
DATEADD(day, DATEDIFF(day, 0, @pointInTime), 0) AS StartOfDay,
DATEADD(day, DATEDIFF(day, 1, @pointInTime), 0) AS Yesterday,
DATEADD(day, DATEDIFF(day, -1, @pointInTime), 0) AS Tomorrow,
DATEADD(day, 1 - DATEPART(weekday, @pointInTime), DATEADD(day,
DATEDIFF(day, 0, @pointInTime), 0)) AS StartOfThisWeek,
DATEADD(day, 1 - DATEPART(weekday, @pointInTime), DATEADD(day,
DATEDIFF(day, 7, @pointInTime), 0)) AS StartOfPreviousWeek,
DATEADD(month, DATEDIFF(month, 0, @pointInTime), 0) AS StartOfMonth,
DATEADD(quarter, DATEDIFF(quarter, 0, @pointInTime), 0) AS StartOfQuarter,
DATEADD(year, DATEDIFF(year, 0, @pointInTime), 0) AS StartOfYear,
DATEADD(hour, 8, DATEADD(day, DATEDIFF(day, 0,
@pointInTime), 0)) AS StartOfBusinessDay_8am,
DATEADD(month, 6, DATEADD(year, DATEDIFF(year, 0,
@pointInTime), 0)) AS StartOfFiscalYear_July1st;
因此,对于你需要你的“本周”比较,假设本周开始在午夜周日是:
SELECT * FROM MyTable WHERE
(LOGTS >= DATEADD(day, 1 - DATEPART(weekday, GETDATE()),
DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0))
这也假定LOGTS使用本地时间;如果使用GMT/UTC更改GETDATE()GETUTCDATE()。
就我个人而言,我会将日期计算分配给变量,并直接在比较中使用它们;看起来有点干净。
此外,任何datetime
范围应当使用半开区间,以避免分数第二圆问题进行比较;即大于或等于开始/较旧时间,小于(不小于或等于)结束/较新时间。 BETWEEN在这里不起作用。
所以对于“上周”范围中的记录,使用上面的命名值:
SELECT ... WHERE (LOGTS >= StartOfPreviouWeek) AND (LOGTS < StartOfThisWeek);
等。
- 1. 根据日期范围选择记录值
- 2. 根据日期范围查找记录
- 3. 根据日期范围获取记录
- 4. 活动记录日期范围选择
- 5. 根据日期范围选择交易
- 6. 根据日期范围选择对象
- 7. 根据sql db中的日期选择记录
- 8. 如何在sqlite中为日期范围选择记录
- 9. 如何根据xpath中的日期范围选择节点?
- 10. 根据日期比较选择记录
- 11. 根据日期选择记录SQL
- 12. 根据日期选择记录
- 13. 根据日期选择最新记录
- 14. 根据表中分配的日期范围按日期筛选记录
- 15. 如何根据mysql中的2个日期来选择记录
- 16. 如何从日期范围中选择数据源
- 17. SQL从日期范围中选择
- 18. 从Pandas DataFrame中选择日期范围
- 19. 如何根据日期范围内的日期选择子字符串
- 20. 如何根据日期范围
- 21. 根据日期选择器中的From和To日期选择记录
- 22. 如何选择日期[不]范围
- 23. 如何从给定日期范围下降的db中选择行?
- 24. 根据日期范围选择列的数据
- 25. 根据日期范围选择过滤Excel数据熊猫
- 26. 选择日期范围
- 27. 选择日期范围
- 28. 日期范围选择
- 29. 如何根据最新日期选择记录
- 30. 过滤器根据日期范围内的一些记录
特定数据库引擎?或者在.net中使用什么语言? – jvanderh 2009-07-01 04:26:00