[sql] 두 날짜 사이의 날짜를 선택하는 SQL 쿼리

나는이 start_dateend_date. 이 두 날짜 사이의 날짜 목록을 얻고 싶습니다. 누구든지 내 쿼리에서 실수를 지적하도록 도울 수 있습니까?

select Date,TotalAllowance
from Calculation
where EmployeeId=1
  and Date between 2011/02/25 and 2011/02/27

변수 Date는 다음과 같습니다 datetime.



답변

이 두 날짜를 작은 따옴표로 묶어야합니다.

select Date, TotalAllowance from Calculation where EmployeeId = 1
             and Date between '2011/02/25' and '2011/02/27'

또는 사용할 수 있습니다

select Date, TotalAllowance from Calculation where EmployeeId = 1
             and Date >= '2011/02/25' and Date <= '2011/02/27'

첫 번째 날짜는 포괄적이지만 두 번째 날짜는 ‘2011/02/27 00:00:00’이므로 배타적입니다.


답변

지정된 시간 세그먼트가없는 날짜 시간의 값은 date 00:00:00.000이므로 범위의 모든 날짜를 얻으려면 종료 날짜의 시간을 제공하거나 종료 날짜를 늘리고를 사용해야 <합니다.

select Date,TotalAllowance from Calculation where EmployeeId=1
and Date between '2011/02/25' and '2011/02/27 23:59:59.999'

또는

select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= '2011/02/25' and Date < '2011/02/28'

또는

select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= '2011/02/25' and Date <= '2011/02/27 23:59:59.999'

시간이 00 : 00 : 00.000 인 경우 2011/02/28부터 일부 레코드를 반환 할 수 있으므로 다음을 사용하지 마십시오.

select Date,TotalAllowance from Calculation where EmployeeId=1
and Date between '2011/02/25' and '2011/02/28'


답변

이 시도:

select Date,TotalAllowance from Calculation where EmployeeId=1
             and [Date] between '2011/02/25' and '2011/02/27'

날짜 값은 문자열로 입력해야합니다.

SQL Server 2008 이상에 대한 향후 쿼리 성능을 보장하려면 Date이후 버전에서는 예약어이므로 이스케이프 처리해야합니다.

시간이없는 날짜는 자정을 기본값으로 사용하므로 올바른 값이 없을 수 있습니다.


답변

select * from table_name where col_Date between '2011/02/25'
AND DATEADD(s,-1,DATEADD(d,1,'2011/02/27'))

여기에서 먼저 현재 2011-02-28 00:00:00종료 날짜에 요일을 추가하면됩니다 . 그런 다음 종료 날짜를 만들기 위해 1 초를 뺍니다 2011-02-27 23:59:59. 이렇게하면 주어진 간격 사이의 모든 날짜를 얻을 수 있습니다.

output:
2011/02/25
2011/02/26
2011/02/27


답변

select * from test
     where CAST(AddTime as datetime) between '2013/4/4' and '2014/4/4'

-데이터 유형이 다른 경우


답변

이 쿼리는 현재 날짜와 다음 3 개 날짜 사이의 값을 가져 오는 데 적합합니다.

SELECT * FROM tableName  WHERE columName
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)

결과적으로 현재 날짜에 추가 3 일의 버퍼가 추가됩니다.


답변

이것은 매우 오래되었지만 날짜에 대한 경험이 많았을 때 이것을 고려하고 싶을 수도 있습니다. 사람들은 지역 설정에 따라 다른 지역 설정을 사용합니다. 지역 설정에 따라 일부 데이터베이스 및 컴퓨터는이를 읽을 수 있습니다 2016 년 12 월 11 일 또는 2016 년 11 월 12 일의 2016 년 11 월 12 일. 2016 년 11 월 12 일 또는 MySQL 데이터베이스에 제공된 16/11/12는 2016 년 11 월 12 일로 내부적으로 변환되며 영국 지역 설정 컴퓨터에서 실행되는 Access 데이터베이스는 해석 및 2012 년 11 월 16 일로 저장하십시오.

따라서 날짜 및 데이터베이스와 상호 작용할 때마다 명시 적으로 내 정책을 만들었습니다. 따라서 항상 다음과 같이 쿼리 및 프로그래밍 코드를 제공합니다.

SELECT FirstName FROM Students WHERE DoB >= '11 Dec 2016';

또한 Access는 #을 수락하므로 다음을 수행하십시오.

SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#;

그러나 MS SQL 서버는 그렇지 않으므로 두 데이터베이스가 모두 허용하는 위의 “” “를 항상 사용합니다.

그리고 코드의 변수에서 해당 날짜를 가져올 때 항상 다음과 같이 결과를 문자열로 변환합니다.

"SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy")

때로는 일부 프로그래머가 고유 한 변환을 감지하기에 충분하지 않을 수 있기 때문에 이것을 쓰고 있습니다. 날짜 <13에 대해서는 오류가 없으며 단지 다른 결과입니다!

묻는 질문에 대해서는 마지막 날짜에 하루를 추가하고 다음과 같이 비교하십시오.

dated >= '11 Nov 2016' AND dated < '15 Nov 2016'