답변:
이 두 날짜를 작은 따옴표로 묶어야합니다.
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'이므로 배타적입니다.
between
예상대로 작동해야합니다.
지정된 시간 세그먼트가없는 날짜 시간의 값은 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'
'2011/02/28 00:00:00.000'
되었습니까?
convert(date, Date) between '2011/02/25' and '2011/02/27'
(최소한 최신 MS SQL Server와 함께) 사용할 수도 있습니다 . convert()
부분은 시간 부분을 제거 처리됩니다 예상대로 비교 사이는 작동합니다.
이 시도:
select Date,TotalAllowance from Calculation where EmployeeId=1
and [Date] between '2011/02/25' and '2011/02/27'
날짜 값은 문자열로 입력해야합니다.
SQL Server 2008 이상에 대한 향후 쿼리 성능을 보장하려면 Date
이후 버전에서는 예약어이므로 이스케이프 처리해야합니다.
시간이없는 날짜는 자정을 기본값으로 사용하므로 올바른 값이 없을 수 있습니다.
이것은 매우 오래되었지만 날짜에 대한 경험이 많았을 때 이것을 고려하고 싶을 수도 있습니다. 사람들은 지역 설정에 따라 다른 지역 설정을 사용합니다. 지역 설정에 따라 일부 데이터베이스 및 컴퓨터는이를 읽을 수 있습니다 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'
예를 들어 # # 사이에 날짜를 넣으십시오.
#2013/4/4# and #2013/4/20#
그것은 나를 위해 일했다.
날짜가 24 시간이고 아침에 시작하여 밤에 끝나는 경우 다음과 같이 추가해야합니다.
declare @Approval_date datetime
set @Approval_date =getdate()
Approval_date between @Approval_date +' 00:00:00.000' and @Approval_date +' 23:59:59.999'
현재 날짜와 지난 3 일 간의 선택 날짜에 대한 최상의 쿼리 :
select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN
DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND CURDATE()
현재 날짜와 다음 3 일 사이의 선택 날짜에 대한 최상의 쿼리 :
select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN
CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
아래 예를 확인하십시오 : 작동 및 비 작동.
select * from tblUser Where
convert(varchar(10),CreatedDate,111) between '2015/04/01' and '2016/04/01' //--**Working**
또는
select * from tblUser Where
(CAST(CreatedDate AS DATETIME) between CAST('2015/04/01' AS DATETIME) And CAST('2016/4/30'AS DATETIME)) //--**Working**
또는
select * from tblUser Where
(YEAR(CreatedDate) between YEAR('2015/04/01') And YEAR('2016/4/30'))
//--**Working**
아래는 작동하지 않습니다.
select * from tblUser Where
Convert(Varchar(10),CreatedDate,111) >= Convert(Varchar(10),'01-01-2015',111) and Convert(Varchar(10),CreatedDate,111) <= Convert(Varchar(10),'31-12-2015',111) //--**Not Working**
select * from tblUser Where
(Convert(Varchar(10),CreatedDate,111) between Convert(Varchar(10),'01-01-2015',111) And Convert(Varchar(10),'31-12-2015',111)) //--**Not Working**
나는 갈 것이다
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= '2011/02/25' and Date < DATEADD(d, 1, '2011/02/27')
>=
전체 시작 날짜를 <
포함하고 종료 날짜를 제외하는 논리 이므로 종료 날짜에 하나의 단위를 추가합니다. 예를 들어 다음과 같이 몇 개월 동안 적용 할 수 있습니다.
select Date, ... from ...
where Date >= $start_month_day_1 and Date < DATEADD(m, 1, $end_month_day_1)
가장 정확한 결과를 얻으려면 실제로 모든 SQL 날짜는 yyyy-MM-dd 형식이어야합니다.
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP 10 [Id]
,[Id_parvandeh]
,[FirstName]
,[LastName]
,[RegDate]
,[Gilder]
,[Nationality]
,[Educ]
,[PhoneNumber]
,[DueInMashhad]
,[EzdevajDate]
,[MarriageStatus]
,[Gender]
,[Photo]
,[ModifiedOn]
,[CreatorIp]
From
[dbo].[Socials] where educ >= 3 or EzdevajDate >= '1992/03/31' and EzdevajDate <= '2019/03/09' and MarriageStatus = 1
이 방법으로 작성하는 것이 좋습니다.
CREATE PROCEDURE dbo.Get_Data_By_Dates
(
@EmployeeId INT = 1,
@Start_Date DATE,
@End_Date Date
)
AS
Select * FROM Calculation
where EmployeeId=@EmployeeId AND Test_Date BETWEEN @Start_Date AND @End_Date
RETURN
SELECT Date, TotalAllowance
FROM Calculation
WHERE EmployeeId = 1
AND Date BETWEEN to_date('2011/02/25','yyyy-mm-dd')
AND to_date ('2011/02/27','yyyy-mm-dd');