2012-02-08 2 views
0

У меня есть переменная с именем $ date с форматом даты, например 2012-01-30. С другой стороны, у меня есть поле под названием srt_date_sortie в таблице mysql. Формат этого поля похож на 2012-01-30 11:31:00. Я хотел бы выбрать все записи, где $ date и srt_date_sortie имеют равные даты, не принимая во внимание время. Надеюсь, кто-то может помочь.php select query с разными форматами дат

mysql_query("SELECT * FROM sorties WHERE srt_date_sortie = '$date'"); 

Вот ниже как я вложу дату:

++$input; 
$test=$input." days"; 
$date=date('Y-m-d', strtotime($test)); 

Заранее спасибо за ваши ответы. Приветствия. Марк

ответ

2

По соображениям производительности вы должны избегать сравнений с производными колонками, как DATE(srt_date_sortie), так как это позволит предотвратить любые индексы от использования. Это отрицает некоторые из уже опубликованных решений.

Наиболее эффективным способом запроса против вашего DATETIME поля с помощью запроса диапазона, как:

mysql_query("SELECT * FROM sorties WHERE srt_date_sortie BETWEEN '$date 00:00:00' AND '$date 23:59:59'"); 

Если вы не нужны все строки из таблицы, SELECT * может оказаться неэффективным, просто список строк, вам нужно получить.

+1

Спасибо, Джеймс за вашу помощь и объяснения. – Marc

0

Вы можете отформатировать дату, используя DATE_FORMAT в MySQL

mysql_query("SELECT * FROM sorties 
      WHERE DATE_FORMAT(srt_date_sortie,'%Y-%m-%d') = '$date'"); 
+0

Здравствуйте Click. К сожалению, ваше предложение не работает. В любом случае, спасибо за помощь. Приветствия. – Marc

0
mysql_query("SELECT * FROM sorties WHERE DATE(srt_date_sortie) = '$date'"); 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date

+0

Привет, Тимур. Это работает. Ты жжешь. Благодаря! – Marc

+0

Добро пожаловать) – Timur

+1

Этот метод неэффективен и вызовет полное сканирование таблицы (см. Мое объяснение ниже) –

2

Изменить запрос с ключевым словом BETWEEN для времени даты начала и окончания времени.

0
mysql_query("SELECT * FROM sorties WHERE srt_date_sortie LIKE '%2012-01-30%'"); 
0
$date=date('Y-m-d H:i:s', strtotime($test)); 

Используйте его

+0

Не работает. Спасибо, в любом случае. Приветствия. – Marc

0

Проверьте функцию TIMESTAMPDIFF MySQL

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); 
     -> 3 
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01'); 
     -> -1 
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55'); 
     -> 128885 
Смежные вопросы