Aşağıdaki sorgu:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
hiçbir şey döndürmez.
Sorgu olsa çalışması için yeterli veri olması gerekir. Neyi yanlış yapıyorum?
Aşağıdaki sorgu:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
hiçbir şey döndürmez.
Sorgu olsa çalışması için yeterli veri olması gerekir. Neyi yanlış yapıyorum?
Yanıtlar:
İkinci tarihiniz ilk tarihinizden önce (yani, 29 Eylül 2010 ile 30 Ocak 2010 arasında sorgulama yapıyorsunuz). Tarihlerin sırasını tersine çevirmeyi deneyin:
SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
where
cümle select
veya update
ifadelerde aynı şekilde çalışmalıdır .
Mı date_field
Çeşidi datetime
? Ayrıca ilk önce kazanıcı tarihini koymanız gerekir.
Olmalı:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
DATE (), bir tarihin veya tarih / saat ifadesinin yalnızca tarih bölümünü ayıklayan bir MySQL işlevidir
SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';
@Sabin'den gelen cevaba ek olarak ve sadece tarih bölümünü karşılaştırmak istiyorsa bir ipucu olarak (zaman olmadan):
Karşılaştırılacak alan datetime türündeyse ve karşılaştırma için yalnızca tarihler belirtilmişse, bu tarihler dahili olarak datetime değerlerine dönüştürülür . Bu şu sorgu anlamına gelir
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
dönüştürülecek
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
içten.
Bu da, 2010-09-29 arasındaki zaman değeri 00:00:00'dan büyük olan nesneleri içermeyen bir sonuca yol açar!
Bu nedenle, 2010-09-29 tarihine sahip tüm nesnelerin de dahil edilmesi gerekiyorsa, karşılaştırılacak alanın bir tarihe dönüştürülmesi gerekir:
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
Daha büyük veya eşit ve daha küçük veya eşit ile karşılaştırarak manuel olarak yapabilirsiniz.
select * from table_name where created_at_column >= lower_date and created_at_column <= upper_date;
Örneğimizde, belirli bir günden güne veri almamız gerekiyor. Günün başından başka bir günün en son saniyesine kadar karşılaştırırız.
select * from table_name where created_at_column >= '2018-09-01 00:00:00' and created_at_column <= '2018-09-05 23:59:59';
Tarih ve Saat değerlerini kullanırken , alanları DateTime
değil olarak atamanız gerekir Date
. Deneyin :
SELECT * FROM `objects`
WHERE (CAST(date_field AS DATETIME)
BETWEEN CAST('2010-09-29 10:15:55' AS DATETIME) AND CAST('2010-01-30 14:15:55' AS DATETIME))
Sunucu tarafında veya istemci tarafında tarih yapılandırmasıyla ilgili bir sorun olabilir. Ana bilgisayar İspanyolca, Fransızca veya herhangi bir şekilde yapılandırıldığında birden çok veritabanında ortak bir sorun olarak buldum ... biçimini etkileyebilir dd / mm / yyyy veya mm / dd / yyyy.
Date_field'ı tarih olarak yayınla
SELECT * FROM `objects`
WHERE (cast(date_field as date) BETWEEN '2010-09-29' AND
'2010-01-30' )
min
vemax
değerler aralığı içinde olduğu kabul edilir ya da iki kere bir tarih işlemez için,min
vemax
değeri (kenarı durumda). Örneğin, tarih2010-09-29 00:00:00
olacak arasındaki2010-09-28 00:00:00
ve2010-09-29 00:00:00
, VE AYRICA arasında2010-09-29 00:00:00
ve2010-09-30 00:00:00