php для вызова MSSQL-запроса и сравнения двух дат? - PullRequest
2 голосов
/ 10 января 2012

Привет всем, я немного застрял и мне нужна помощь.

Я звоню во внешнюю базу данных MSSQL (не MySQL) с моего сервера Linux и отображаю результаты ПОСЛЕ сегодняшней даты.Вот код:

$today = date("Y-m-d");// current date
$date = strtotime(date("Y-m-d", strtotime($today)));
$todaysDate = date( 'M j Y g:i:s:000A', $date ); //converts it for MSSQL standards

$query = "select DateofArrival from aTable where DateofArrival > '". $todaysDate ."'";

Когда я запускаю запрос, он отображает ВСЕ результаты, даже не крича о ГДЕ.

Я предполагаю, что это потому, что он сравнивает дату со строкой?Хотя не совсем уверен в этом.

Есть мысли?Заранее спасибо!

Обновление: Вот строка с повторяющимся запросом.

$query = "select DateofArrival from aTable where DateofArrival > 'Jan 10 2012 12:00:00:000AM'";

примеры дат хранятся в БД:

Feb 28 2004 12:00:00:000AM
Oct 14 2009 12:00:00:000AM
May 18 2011 12:00:00:000AM
Apr 10 2012 12:00:00:000AM

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Не форматируйте дату на стороне PHP, потому что вы должны учитывать, что ваш веб-сервер и сервер sql не находятся в одном часовом поясе. Вместо этого просто сделайте этот запрос:

$query = "select DateofArrival from aTable where DateofArrival > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))"

EDIT

Похоже, что ваши даты хранятся в базе данных в виде строки. В этом случае вы должны выполнить этот запрос

$query = "select DateofArrival from aTable where convert(datetime, DateofArrival, 109) > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))"
0 голосов
/ 10 января 2012

T-SQL / MSSQL использует стандартный военный формат, вы видите формат «M j Y g: i: s: 000A», потому что вы используете программное обеспечение, которое преобразует выходные данные в соответствии с языком вашей системы или языкомбазу данных, я не уверен, какая именно.

Что я точно знаю, так это то, что при сравнении дат в MSSQL, как и в любой другой системе, всегда использует

Y-m-d G:i:s

формат.Именно так базы данных хранят данные и ожидают, что они будут предоставлены при вводе или сравнении.

Я провел 5 лет работы в VB6 + MSSQL, поэтому я подтверждаю, что вы точно ...Ничего особенного в VB6, мне пришлось самому изучать формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...