it-swarm-tr.com

İki tarih arasındaki tarihleri ​​seçmek için SQL sorgusu

Bir start_date ve end_date var. Bu iki tarih arasındaki tarihlerin listesini almak istiyorum. Birisi sorgumdaki hatayı işaret etmeme yardımcı olabilir.

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

Burada Date bir datetime değişkenidir.

231
Neeraj

bu iki tarihi tek tırnak işareti arasına koymalısınız.

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

veya kullanabilir

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

Belirli bir zaman dilimine sahip olmayan bir tarih saat değeri date 00:00:00.000 değerine sahip olacağından, aralığınızdaki tüm tarihleri ​​aldığınızdan emin olmak istiyorsanız, bitiş tarihiniz için zaman vermeniz veya bitiş tarihinizi arttırmanız ve < kullanmanız gerekir.

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

OR

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

VEYA 

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

Zamanları 00: 00: 00.000 ise, 2011/02/28'den itibaren bazı kayıtları iade edebileceğinden aşağıdakileri KULLANMAYIN.

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

Bunu dene:

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

Tarih değerlerinin dizge olarak yazılması gerekir.

Sorgunuzun daha sonra SQL Server 2008 ve daha üst sürümlerde prova edilmesini sağlamak için, sonraki sürümlerde ayrılmış bir Word olduğu için Date karakterinden kaçılmalıdır.

Zamansız tarihlerin gece yarısını varsayılanları olarak aldığını ve bu nedenle orada doğru değeri alamayacağınızı unutmayın.

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

Burada ilk önce geçerli endDate'e bir gün ekleyin, 2011-02-28 00:00:00 olacaktır, ardından bitiş tarihini 2011-02-27 23:59:59 yapmak için bir saniye çıkartın. Bunu yaparak, verilen aralıklar arasındaki bütün tarihleri ​​alabilirsiniz.

output:
2011/02/25
2011/02/26
2011/02/27
9
Chandra Prakash

Bu sorgu geçerli tarih ile sonraki 3 tarih arasındaki değerleri almak için iyi durumda

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

Bu sonuçta mevcut tarihe ekstra 3 gün tampon ekleyecektir.

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

- eğer veri tipi farklıysa

5
hamze shoae

Bu çok eski, ancak tarihlerle ilgili edindiğim birçok deneyime rağmen, bunu göz önünde bulundurmak isteyebilirsiniz: İnsanlar farklı bölgesel ayarlar kullanır, örneğin bazı insanlar (ve bölgesel ayarlara bağlı olarak bazı veritabanları/bilgisayarlar) bunu okuyabilir. 11 Aralık 2016 veya 12 Kasım 2016 tarihlerinde 11.12.2016 tarihine kadar. Dahası, MySQL veritabanına sağlanan 16/11/12 dahili olarak 12 Kasım 2016'ya dönüştürülürken, İngiltere bölgesel ayar bilgisayarında çalışan Access veritabanı yorumlayacaktır. 16 Kasım 2012 olarak saklayın.

Bu nedenle, tarih ve veritabanlarıyla ne zaman etkileşime gireceğimi açıkça belirten politikamı yaptım. Bu yüzden her zaman sorgularımı ve programlama kodlarımı aşağıdaki gibi sağlıyorum:

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

Ayrıca, Access'in # kabul edeceğini unutmayın;

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

fakat MS SQL sunucusu çalışmayacak, bu yüzden her iki veritabanının da kabul ettiği yukarıdaki gibi "'" her zaman kullanıyorum.

Ve bu tarihi koddaki bir değişkenden alırken, sonucu daima aşağıdaki gibi dizeye dönüştürürüm:

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

Bunu yazıyorum çünkü bazen bazı programcıların içsel dönüşümü tespit etmek için yeterince istekli olamayacağını biliyorum. <13 tarihlerinde hata olmaz, sadece farklı sonuçlar!

Sorulan soruya gelince, son tarihe bir gün ekleyin ve karşılaştırmayı şu şekilde yapın:

dated >= '11 Nov 2016' AND dated < '15 Nov 2016' 
4
Hannington Mambo

Örneğin # #.

#2013/4/4# and #2013/4/20#

Benim için çalıştı.

--- EDIT ---.__ Birisi bu cevabı düşürdüğü için iki itibar puanı kaybettim. Lütfen cevap sizin için işe yaramazsa, sadece aşağı oy kullanmayın. Yorumlarda daha fazla bilgi/yardım isteyin veya diğer çözümleri kontrol edin.

İtibar puanları umurumda değil - Sadece aşağı oylama yapılmadığını söylüyorum.

3
Casper
select Date,TotalAllowance 
from Calculation 
where EmployeeId=1
  and convert(varchar(10),Date,111) between '2011/02/25' and '2011/02/27'
3
njtd

geçerli tarih ve üç gün arasında seçim tarihi için en iyi sorgu :

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

geçerli tarih ve sonraki üç gün arasında seçim tarihi için en iyi sorgu :

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

24 saat içinde çıkıp sabah başlayıp gecenin bitmesi gibi bir şey eklemek gerekirse: 

declare @Approval_date datetime
set @Approval_date =getdate()
Approval_date between @Approval_date +' 00:00:00.000' and @Approval_date +' 23:59:59.999'
1
Sheryar Nizar
Select 
    * 
from 
    Calculation 
where 
    EmployeeId=1 and Date between #2011/02/25# and #2011/02/27#;
1
Saad Sheikh

i̇ki tarih verisini göstermek için aramızı kullanabiliriz, ancak bu tüm verileri arayacak ve karşılaştıracak ve bu sayede işlemimizi büyük veriler için yavaşlatacak, bu yüzden herkese datediff kullanmasını öneriyorum:

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

burada takvim, başlangıç ​​tarih değişkeni olarak dt ve dt2 son tarih değişkenidir.

1
Bipul Roy

Aşağıdaki Örnekleri Kontrol Edin: Hem Çalışıyor hem de Çalışmıyor.

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**

VE aşağıdaki çalışmıyor:

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**
1
Tobbin Well

Gerçekten de, tüm sql tarihleri ​​en doğru sonuç için yyyy-AA-GG biçiminde olmalıdır.

Bu SQL'i deneyebilirsiniz

select * from employee where rec_date between '2017-09-01' and '2017-09-11' 
0
Kamran

Giderdim

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

>= öğesinin bütün başlangıç ​​tarihini ve < bitiş tarihini hariç tuttuğu mantığı, bitiş tarihine bir birim ekliyoruz. Bu, aylarca uyarlanabilir, örneğin:

select Date, ... from ...
             where Date >= $start_month_day_1 and Date < DATEADD(m, 1, $end_month_day_1)
0
entonio

Eski tarihler için '1 MonthName 2015' sözdizimini kullanmayı seviyorum:

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

tarihler için

0
Juan