SQL-запрос для выбора даты между двумя датами - PullRequest
252 голосов
/ 26 февраля 2011

У меня есть start_date и end_date.Я хочу получить список дат между этими двумя датами.Может ли кто-нибудь помочь мне указать ошибку в моем запросе.

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

Здесь Date - это datetime переменная.

Ответы [ 20 ]

1 голос
/ 17 июля 2014

лучший запрос для выбранной даты между текущей датой и задним числом три дня :

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN       
DATE_SUB(CURDATE(), INTERVAL 3 DAY)  AND CURDATE() 

лучший запрос для выбранной даты между текущей датой и следующие три дня :

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN   
   CURDATE()  AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)   
1 голос
/ 04 декабря 2017

мы можем использовать между ними, чтобы показать данные двух дат, но при этом будет выполнен поиск по всем данным и сравнение, что замедлит процесс обработки больших данных, поэтому я предлагаю всем использовать datediff:

qry = "SELECT * FROM [calender] WHERE datediff(day,'" & dt & "',[date])>=0 and datediff(day,'" & dt2 & "',[date])<=0 "

здесь calender - Таблица, dt - переменная даты начала, а dt2 - переменная даты окончания.

1 голос
/ 13 января 2016

Проверьте ниже Примеры: как работающие, так и нерабочие.

select * from tblUser Where    
convert(varchar(10),CreatedDate,111) between '2015/04/01' and '2016/04/01' //--**Working**

OR

select * from tblUser Where
(CAST(CreatedDate AS DATETIME) between CAST('2015/04/01' AS DATETIME) And CAST('2016/4/30'AS DATETIME)) //--**Working**

OR

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**
0 голосов
/ 21 июня 2019

На самом деле все даты sql должны быть в формате гггг-мм-дд для наиболее точных результатов.

0 голосов
/ 11 сентября 2017

Вы можете попробовать этот SQL

select * from employee where rec_date between '2017-09-01' and '2017-09-11' 
0 голосов
/ 12 апреля 2017

лучше написать так:

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
0 голосов
/ 17 сентября 2013
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');
0 голосов
/ 15 ноября 2016

Я бы пошел на

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)
0 голосов
/ 02 октября 2015

Мне нравится использовать синтаксис «1 MonthName 2015» для дат, например:

   WHERE aa.AuditDate>='1 September 2015'
     AND aa.AuditDate<='30 September 2015'

для дат

0 голосов
/ 23 ноября 2013
Select 
    * 
from 
    Calculation 
where 
    EmployeeId=1 and Date between #2011/02/25# and #2011/02/27#;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...