Boş mysql datetime alanları seçme

5 Cevap php

Bu daha boş datetime alanları seçmek için daha iyi bir yolu var mı?

SELECT * FROM `table` WHERE `datetime_field` = '0000-00-00 00:00:00'

5 Cevap

Ne şekilde daha iyi? Bu sorgu bunu sormak her şeyi yapar ve bunu almak için gidiyor gibi datetime_field, o kadar hızlı bir dizin var sağladı.

Eğer sorgu "çirkin" seyir konusunda endişeli iseniz, olmayın. Onun amacı oldukça açıktır.

Eğer düşünebiliriz tek olası gelişme sorgu hale geldiği durumda bu zero-date/time satırlar, NULL'ları kullanmaktır:

SELECT * FROM `table` WHERE `datetime_field` IS NULL

Ben standartlara uyumlu bir DBMS ile yapardım. Benim anlayış MySQL may I IS NULL çalışmayabilir sanırım bu durumda, bu korkunç bir şekilde gerçek NULL datetime alanlarını temsil olmasıdır.

SELECT * FROM db.table WHERE UNIX_TIMESTAMP(datetime_field) = 0

O (örn. '2010-01-00 00:00:00 de "tarihleri ​​sıfır" yakalar olduğu "sıfır tarihlerini" (örn. '0000-00-00 00:00:00 ') yakalar çünkü sadece ben bu kodu gibi )

Ben bunu kullanın:

SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`datetime_field`) = 0

/ Tarih datetime sütun NOT NULL sunulmuştur sadece kullanabilirsiniz:

SELECT * FROM `table` WHERE `datetime_field` IS NULL

MySQL sizin için '0000-00-00 00:00:00 'eşit sütunları seçecektir.

Note: If you do: SELECT datetime_field IS NULL

MySQL 0 (false) döner ama WHERE yan tümcesi bir parçası olarak kullanıldığında bu deyimi hala doğrudur.

From the manual

NOT NULL olarak ilan edilir TARIHI ve DATETIME sütunlar için, böyle bir deyimi kullanarak özel tarih '0000-00-00 'bulabilirsiniz:

Date_column IS NULL tbl_name SELECT * FROM

Bu ODBC '0000-00-00 'tarihi değeri desteklemiyor çünkü bazı ODBC uygulamaları işe almak için gereklidir.

http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-null

Ben bu ne yapacak emin değilim, bana bir feragatname dışarı koyalım. O amele Ama eğer gerçekten harika olurdu.

SELECT * FROM table WHERE datetime = DATESUB(NOW(),NOW());