날짜가 3 월 10 일에서 4 월 20 일 사이인지 확인해야하며 어느 해에 작동해야합니다. 저는 SQL Server를 처음 접해 보았습니다. 날짜 비교에 대한 훌륭한 토론이있었습니다. 그러나 모두 수년이 걸렸으므로 올해를 하드 코딩하고 싶지는 않습니다. 어떻게 이것이 깔끔한 방식으로 이루어져야합니까?두 달 사이의 날짜 확인 SQL 서버
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가 1 년 (그러나 1 년)의 두 특정 날짜 사이에 있는지 확인하려면 다음을 수행 할 수 있습니다. 당신은 StartDateTime
생성 방법 다음 사용할 수
Select *
From MyTable
Where CreatedDate Between Convert(Varchar, YEAR(CreatedDate)) + '-03-12'
and Convert(Varchar, YEAR(CreatedDate)) + '-03-15'
-1
당신이 날짜에서만 달 얻을 수 있도록 도와 추출 기능은 다음 링크를 참조하시기 바랍니다 : 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
-Sales.SalesOrderHeader.OrderDate
열에서 매년 StopDateTime
범위는 (내가 AdventureWorks sample database 사용했습니다 : SQL2008의 +). 이 방법은 SARG-수 있으며, 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. 두 달 사이의 달 계산
- 2. 두 날짜 사이의 달 수 SAS
- 3. SQL 서버 2008에서 주어진 두 날짜 사이의 합계 방법
- 4. 두 날짜 사이의 sql 쿼리 날짜 차이
- 5. 두 날짜 사이의 날짜
- 6. C에서 두 날짜 사이의 달 수를 계산하는 방법
- 7. 두 특정 날짜 사이의 날짜
- 8. SQL 서버 2008 R2 - 날짜 사이의 날짜가
- 9. SQL 지난 달 날짜 일
- 10. 날짜 사이의 SQL 찾기
- 11. SQL 서버 날짜 입력을 기준으로 확인
- 12. Oracle SQL - 두 날짜 사이의 변수
- 13. 두 날짜 사이의 SQL 저장소 논리
- 14. SQL : 두 날짜 사이의 기록을 찾는 방법
- 15. 두 날짜 사이의 출석을 표시하는 SQL 쿼리
- 16. 두 날짜 사이의 SQL 쿼리 선택 오류
- 17. SQL Access 사이의 두 날짜 사이
- 18. SQL "over"파티션 두 값 사이의 날짜
- 19. 두 날짜 사이의 날짜 계산하기
- 20. 두 날짜 사이의 날짜 생성
- 21. 두 날짜 사이의 데이터 선택
- 22. SQL 서버 - 합계 한 달/년 합계
- 23. 두 날짜 사이의 일수
- 24. 두 날짜 사이의 날짜입니다. SharePoint
- 25. SQL 서버 테이블에서 최대 두 날짜 선택
- 26. 날짜 범위 그룹 달
- 27. 두 달 간의 보간 월간 날짜 R
- 28. 두 날짜 확인
- 29. 두 날짜 사이의 초 계산 및 분류
- 30. 두 날짜 개체 사이의 시간 차이를 확인 하시겠습니까?
mysql 함수는 SQL Server에 많은 도움이되지 않습니다! –