我需要檢查我的日期是(例如)3月10日到4月20日,它應該在任何一年工作。 我對sql server非常陌生,在比較日期時發現了非常好的討論,但它們都包含了幾年,而且我不想對年份進行硬編碼。 這應該如何以一種整潔的方式完成?檢查兩個月之間的日期sql server
3
A
回答
3
您可以分別提取日期部分DAY
,MONTH
和YEAR
。例如
Select MONTH(GETDATE())
會給你當前日期的月份數。
如果你想檢查是否一個月是一定值之間做一個插入前:
If Exists (Select 'x' Where Month(GETDATE()) Between 3 and 4 --March to April
Begin
--Do work here
End
如果你想從表中獲取的所有數據,而且CreatedDate是兩個值之間:
Select *
From MyTable
Where MONTH(CreatedDate) Between 3 and 4 -- March to April
最後,要檢查CreatedDate是否在一年(但任何一年)的兩個特定日期之間,您可以執行以下操作。
Select *
From MyTable
Where CreatedDate Between Convert(Varchar, YEAR(CreatedDate)) + '-03-12'
and Convert(Varchar, YEAR(CreatedDate)) + '-03-15'
-1
請參考以下鏈接EXTRACT功能,幫助您從日期只獲得一個月: http://www.w3schools.com/sql/func_extract.asp
1
有可能是一個更短的方式,但你可以做
SELECT *
FROM your table
--this will transform your date in a varchar with 2 digits for month and 2 digits for day
WHERE RIGHT('0' + RTRIM(CAST (MONTH(<yourdatefield>) as varchar(2))), 2) +
RIGHT('0' + RTRIM(cast(DAY(<yourdatefield>) as varchar(2))), 2)
BETWEEN '0310' and '0410'
0
你可以用下面的辦法產生StartDateTime
- StopDateTime
範圍每年從Sales.SalesOrderHeader.OrderDate
柱(我用AdventureWorks sample database:SQL2008 +)。這種方法是特區政府,能夠與上OrderDate
列的索引最後SELECT語句的執行計劃將包括Index Seek
:
CREATE INDEX IN_SalesOrderHeader_OrderDate
ON Sales.SalesOrderHeader(OrderDate);
GO
DECLARE @StartDay TINYINT,
@StartMonth TINYINT,
@StopDay TINYINT,
@StopMonth TINYINT;
SELECT @StartDay = 10,
@StartMonth = 3,
@StopDay = 20,
@StopMonth = 4;
DECLARE @FirstYear SMALLINT, @LastYear SMALLINT;
SELECT TOP(1) @FirstYear = YEAR(h.OrderDate)
FROM Sales.SalesOrderHeader h
WHERE h.OrderDate IS NOT NULL
ORDER BY h.OrderDate ASC;
SELECT TOP(1) @LastYear = YEAR(h.OrderDate)
FROM Sales.SalesOrderHeader h
WHERE h.OrderDate IS NOT NULL
ORDER BY h.OrderDate DESC;
WITH N10(Num)
AS
(
SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL
SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
), N100(Num)
AS
(
SELECT (a.Num - 1)*10 + b.Num
FROM N10 a CROSS JOIN N10 b
)
SELECT COUNT(z.SalesOrderID) AS SalesOrderCount
FROM
(
SELECT x.CurrentYear,
StartDateTime = DATEADD(DAY, @StartDay-1, DATEADD(MONTH, @StartMonth-1, DATEADD(YEAR, x.CurrentYear - 1900, 0))),
StopDateTime = DATEADD(DAY, @StopDay/*-1*/, DATEADD(MONTH, @StopMonth-1, DATEADD(YEAR, x.CurrentYear - 1900, 0)))
FROM
(
SELECT @FirstYear + n.Num - 1 AS CurrentYear
FROM N100 n
WHERE n.Num <= (@LastYear - @FirstYear + 1)
) x
) y
CROSS APPLY
(
SELECT h.SalesOrderID
FROM Sales.SalesOrderHeader h
WHERE h.OrderDate >= y.StartDateTime
AND h.OrderDate < y.StopDateTime
) z
執行計劃:
注:該解決方案假定Sales.SalesOrderHeader.OrderDate
列的最大值爲100年。
相關問題
- 1. SQL Server - 計算兩個日期之間的月差
- 2. sql server中兩個日期之間的月份差異
- 3. 查找SQL Server中兩個日期之間的工作日
- 4. 查詢以檢查日期是否在兩個月的日期值之間
- 5. 在excel中檢查兩個日期之間的月份
- 6. SQL:檢測兩個日期之間
- 7. 比較,如果日期在SQL Server的兩個日期之間
- 8. sql server打印兩個日期列之間的所有日期
- 9. 兩個日期之間的月數SAS
- 10. 兩個日期之間的月數
- 11. SQL查詢凡之間兩個日期
- 12. SQL Server查找兩個日期之間的記錄
- 13. SQL Server:查找兩個日期之間的記錄
- 14. 計算兩個日期之間的完整月數在SQL
- 15. 想找到可用的一個月兩個日期之間使用SQL Server
- 16. LINQ到兩個日期之間的SQL夜每個月
- 17. SQL Server 2005簡單查詢獲取兩個日期之間的所有日期
- 18. SQL查詢檢索兩個日期之間的字段列表
- 19. 檢查「系統」是否在SQL中的兩個日期之間
- 20. 檢查兩個日期之間的日期錯誤,無知
- 21. 檢查日期是否在mysql中的兩個日期之間
- 22. 檢查日期是在Java中的兩個日期之間
- 23. 如何計算SQL Server中兩個日期月份之間的天數?
- 24. SQL查詢來選擇兩個日期之間的日期
- 25. 兩個日期之間的SQL查詢日期差異
- 26. SQL查詢選擇兩個日期之間的日期
- 27. 計算兩個日期之間每月的天數 - SQL
- 28. SQL顯示兩個日期之間的月數和年數
- 29. 如何計算兩個日期之間的月數SQL
- 30. 如何檢查兩個日期之間的每個月的條件
對於sql server來說,mysql函數並沒有什麼幫助! –