2014-12-29 11 views
8

Tablo user var, id_user, username ve user_time içerir. Ve user_time böylece çıkış böyledir kayıtlı bir kullanıcı, özellikleri timestamp olduğu zamandır:Geçerli gün, hafta, ay ve yıldaki verileri göster

Sonra
User A | user_time > 2014-12-22 10:10:10 

Ben yılda verileri

SELECT * FROM user WHERE user_time = YEAR(NOW()); 

sorgu çalışır ama sadece döner görüntülemek için bu sorguyu kullanın boş bir satır. Sadece yıl değil, aynı zamanda gün, hafta ve ay boş satırları döndürür. Bu sorgu neden herhangi bir veriyi geri vermiyor? Eğer timestamp ve bir sayı numaralarını değil karşılaştırmak böylece

SELECT * FROM user WHERE user_time=YEAR(NOW()) 

deneyin, böyle de user_time den YEAR almak için:

cevap

10

Sorun sizin verilerle hiçbir şey yapmaz olmasıdır: @ItsMe önerildiği gibi

SELECT * FROM user WHERE YEAR(user_time) = YEAR(NOW()) 

Veya:

EXPLAIN SELECT * FROM user WHERE YEAR(user_time) = YEAR(NOW()) 

Ve lütfen, sorgularınızda *'dan kaçının, bu kötü bir uygulamadır.

+0

Teşekkür adam .. Eğer yararlı :) –

+0

@Andhika işleri = YIL (ŞİMDİ()) önerilmez; Tam tablo taraması gerektirecektir. EXPLAIN SELECT * 'den kullanıcı YERİNE YAZ (user_time) = YEAR (ŞİMDİ()) 'yi deneyin. – VMAtm

+2

YIL (user_time) bulduysan cevabı kabul edebilir – ItsMe

6

YEAR, 2014 gibi bir sayı döndürür. Bu asla bir zamana eşit olmayacaktır. Sen user_time yılı verilmiş yılla aynı olup olmadığını test etmek gerekir:

SELECT * FROM user 
WHERE YEAR(user_time) = YEAR(NOW()) 
İlgili konular