我有一個日誌時間數據類型在表中的「日誌」列,我想選擇「上週」,「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