回答
的第一個忠告:存儲日期數據類型日期或日期時間,以便您可以實際搜索它們。
如果你不希望出現這種情況,您需要將字符串日期先轉換,這樣就可以對它們進行搜索:
where convert(date, my_nasty_string_column_with_dates) between @a and @b
這是一個PERF的問題,因爲查詢將永遠無法尋求在索引上。
確定。我可以將日期存儲爲數據類型日期。在這種情況下,如何在兩個日期之間搜索?希望這不會搞砸Q&A過程:) – mechalaris 2013-03-06 17:38:35
在這種情況下,只需省略轉換並直接使用'between'。或者使用'col> = @a AND col <= @ b'。就像那樣,沒有魔法介入。 – usr 2013-03-06 17:39:24
那麼我同意@usr,首先,停止以這種方式存儲日期。
如果你不能,然後添加一個計算列(其中你甚至可能持續和/或索引):
ALTER TABLE dbo.MyTable ADD RealDate
AS CONVERT(DATE, RIGHT(col, 6), 12);
如果你不能做到這一點,然後創建一個視圖:
CREATE VIEW dbo.SmarterView
AS
SELECT /* other columns, */
RealDate = CONVERT(DATE, RIGHT(col, 6), 12)
FROM dbo.MyTable;
然後:
SELECT ... FROM dbo.MyTable -- or dbo.SmarterView
WHERE RealDate >= @Start
AND RealDate < DATEADD(DAY, 1, @End);
(開放式範圍遠遠超過BETWEEN
更好 - 計算月SUC結束ks,特別是2月份。見http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx.)
如果你在1900年的日期,那麼就稍微有點複雜:
CONVERT(DATE, CONVERT(CHAR(2), 19 + CONVERT(INT, LEFT(col, 1))) + RIGHT(col, 6), 112);
在任何情況下,這是無關緊要的,因爲OP表示,他們將正確保存它作爲DATE
。
感謝計算列,你現在可以索引日期。 +1 – usr 2013-03-06 17:40:49
@us好點,添加到身體 – 2013-03-06 17:44:44
將無法使用1900年的日期。你正在取消這個世紀。 – 2013-03-06 17:47:10
您應該可以在Y2K日期與另一個人進行簡單的等式檢查進行比較。如果你想在2000年至DateTime
轉換,那麼你需要增加1900萬,然後將其轉換這樣的例子:
DECLARE @Y2KDate INT
SET @Y2KDate = 1120104
DECLARE @DateTime DateTime
SET @DateTime = CONVERT(DATETIME, CONVERT(CHAR(8), @Y2KDate + 19000000), 112)
PRINT @DateTime
輸出以下
1120104 20120104 Jan 4 2012 12:00AM
- 1. 問題與SQL查詢查找SQL日期之間的記錄
- 2. SQL查詢來查找日期和時間之間記錄
- 3. SQL:查找日期無記錄
- 4. SQL Server查找兩個日期之間的記錄
- 5. SQL Server:查找兩個日期之間的記錄
- 6. 找到2個日期及如果沒有找到返回具有最小日期記錄之間的記錄
- 7. SQL查詢按日期查找特定記錄
- 8. mysql在日期間找到記錄
- 9. SQL查詢 - 查找日期和時間
- 10. 最近2條記錄之間的日期範圍Sql Server 2008
- 11. 按日期查找記錄[Rails 4]
- 12. 根據日期範圍查找記錄
- 13. 在日期範圍內查找記錄
- 14. 在日期範圍內查找記錄
- 15. 查找符合今日日期的日期時間記錄 - Ruby on Rails
- 16. 2日期之間的SQL SELECT查詢
- 17. PHP SQL查詢日期間的2
- 18. 每個ID的最後2條記錄(日期)的sql查詢
- 19. 查找日期 - SQL
- 20. 2個日期之間的查詢記錄
- 21. 在一系列日期之間查找日期的SQL查詢
- 22. SQL查詢:從SQL日期時間查找「日」值
- 23. 如何根據日期查詢記錄
- 24. Oracle SQL Where子句查找30天以前的日期記錄
- 25. SQL查找日期不唯一的記錄
- 26. SQL - 查找給定日期的重複記錄數
- 27. SQL Server使用單日期列查找日期範圍內的記錄
- 28. Sql語句來查找日期小於今天日期的記錄的計數
- 29. SQL:查找最長日期間隔
- 30. SQL查找日期間的平均值
到底什麼日期爲1120104? – 2013-03-06 17:27:36
你的例子代表什麼日期? – Melanie 2013-03-06 17:28:07
第一位= 2000年後 然後2位數字爲年,月,日 – mechalaris 2013-03-06 17:33:28