테이블에 datetime 데이터 형식의 "LOGTS"열이 있는데 "지난 주", "2 주 전"등의 범위에있는 내 레코드를 선택하고 싶습니다! 어떻게해야합니까?날짜 범위에 따라 db에서 레코드를 선택하는 방법은 무엇입니까?
답변
SELECT * from table WHERE LOGTS > '2009-01-01';
작품입니다. 외삽. 또한 캐스팅 할 수 있습니다.
SELECT CAST('1900-01-04 00:00' AS datetime);
여기서 T-SQL을 사용하여 SQL Server를 가정합니다. 그들은 현재 시간을 얻고 부정적인 7 일을 추가하는 것과 같은 것을하기 위해 functions을 가지고 있습니다.
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에 대한 참고 사항 : 일부 (대부분? all?) 구현은 포괄적입니다. 자정 값으로 예기치 않은 결과가 발생할 수 있습니다. 저장하고 비교하는 날짜/시간 값의 세분성에 따라 다릅니다. 문제가있는 경우보다 큼 /보다 작음 연산자를 사용하는 것이 좋습니다. – TSomKes
그래, 좋은 지적이야, 나는 동의한다. –
지난 주부터 오늘까지의 데이터가 필요합니다. 이 경우 작동해야합니다.
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()로 변경하십시오.
개인적으로 나는 날짜 계산을 변수에 할당하고이를 비교에 직접 사용합니다. 조금 더 깨끗해 보인다.
또한범위는 반올림 범위를 사용하여 비교하여 두 번째 부분 반올림 문제를 방지해야합니다. 즉 시작/이전 시간보다 크거나 같고 종료 시간/새 시간보다 작지는 않습니다 (작거나 같지 않음). BETWEEN은 여기서 작동하지 않습니다. 그래서 위의 이름 값을 사용하여 범위 "지난 주"의 기록에 대한
:
SELECT ... WHERE (LOGTS >= StartOfPreviouWeek) AND (LOGTS < StartOfThisWeek);
등등. 특정 데이터베이스 엔진에 대한
- 1. 날짜 범위에 따라 카산드라를 쿼리하는 방법
- 2. MySQL 데이터베이스에서 임의의 레코드를 선택하는 방법은 무엇입니까?
- 3. SQL에서 레코드와 가까운 레코드를 선택하는 방법은 무엇입니까?
- 4. 날짜 및 오프셋에 따라 레코드를 삭제하는 방법
- 5. MS 변수로 레코드를 선택하는 액세스
- 6. postgresql 쿼리에서 날짜 간격을 선택하는 방법은 무엇입니까?
- 7. SQL 서버에서 날짜 범위에 따라 다른 행을 추가하는 방법
- 8. 날짜 표시 텍스트 상자와 날짜 표시 텍스트 상자에 따라 그리드보기의 레코드를 표시하는 방법은 무엇입니까?
- 9. mySQL : 대형 DB에서 레코드를 업데이트하는 가장 효율적인 방법은 무엇입니까?
- 10. 날짜 범위에 얼마나 많은 밤이 있는지 계산하는 방법은 무엇입니까?
- 11. 날짜 범위에 대한 약속 배포
- 12. PHP의 날짜 범위에 대한 MySql 쿼리
- 13. 안드로이드의 데이터베이스 (SQLite)에서 특정 레코드를 선택하는 방법은 무엇입니까?
- 14. 데이터 리피터 C#, winforms에서 레코드를 선택하는 방법은 무엇입니까?
- 15. 큰 데이터베이스에서 레코드를 더 빨리 선택하는 방법은 무엇입니까?
- 16. db에서 display 로의 날짜 변환
- 17. PostgreSQL에서 datetime을 선택하는 방법은 무엇입니까?
- 18. db에서 레코드를 찾거나 만드는 메소드를 호출하는 방법
- 19. 조건에 따라 select 문의 열을 선택하는 방법은 무엇입니까?
- 20. 화면 밀도에 따라 다운로드 한 이미지를 선택하는 방법은 무엇입니까?
- 21. SQL에서 열로 레코드를 선택하는 방법
- 22. DB에서 날짜의 제한된 날짜의 날짜 당 여러 항목을 선택
- 23. DB에서 특수 문자 (')로 레코드를 검색하는 방법
- 24. 그룹 간격 주/달에 날짜 범위에 의해
- 25. 요소를 선택하는 방법은 무엇입니까?
- 26. TTURLRequestCachePolicy를 선택하는 방법은 무엇입니까?
- 27. 조건에 따라 다른 열을 선택하는 방법이 있습니까?
- 28. 범위에 간단한 이름을 가져 오는 방법은 무엇입니까?
- 29. Oracle DB에서 수백만 행 중에서 선택하는 가장 좋은 방법
- 30. Django RSS 피드를 다른 날짜 범위에 다시 사용
? 또는 .net의 어떤 언어로? – jvanderh