2010-05-28 4 views
3

У меня есть 10 строк для сегодняшнего дня, но мое отборного заявления, основанных на дату dosen't похоже на работу ....Является ли это sql, где утверждение правильное?

SELECT Id,WirelessId,RegNo,DriverName1,MobileNo1,DriverName2,MobileNo1 from 
DailySchedule where IsDeleted=0 and CreatedDate='2010-05-28' 

Любое предложение ...

+1

Прежде: что "не работает" означает? У вас нет никаких результатов? Скорее всего, ваш 'CreatedDate' имеет компонент времени. В этом случае вы запрашиваете только те строки, которые происходят точно в полночь. –

+0

Какой тип столбца CreatedDate? – spender

+0

@spender и @joachim его поле Datetime .. –

ответ

7

Только если даты назначенные им полуночи сегодня. Это может быть лучше сделать:

CreatedDate BETWEEN '2010-05-28 00:00' AND '2010-05-29 00:00' 
+1

Более безопасный формат должен иметь «T» между датой и временем, а не пробельным символом. (Более безопасный с точки зрения SQL-сервера всегда получает право на преобразование, независимо от того, какие параметры локали/даты и времени применяются, и где) –

+0

Вы пропустите заявки на участие в последнюю минуту, посмотрите http://blogs.lessthandot.com /index.php/DataMgmt/DataDesign/how-does-between-work-with-dates-in-sql- – SQLMenace

+0

это сработало спасибо ... –

0

Если предположить, что CreatedDate является DateTime или date, я не вижу, что не так с синтаксисом предложения where. Возможно, поле IsDeleted для этих столбцов фактически NULL? (Или не равен нулю, во всяком случае.)

Edit: что говорит Дэйв, или DATE (CreatedDate) = '2010-05-28'

0

Я бы проверить, чтобы увидеть тип столбца CreatedDate и убедитесь, что строка вы передаете преобразовывается в дату правильно.

Когда вы говорите, что у вас есть 10 строк, это подтверждается визуально или с запросом, выполняемым в консоли?

+0

запрос, выполненный в консуле без предложения. –

0

Недостаточно информации для продолжения, но я подозреваю, что ваши даты имеют компонент времени и поэтому не соответствуют строке точно.

Попробуйте использовать:

datediff(day, CreatedDate, '28-may-2010')) = 0 
+0

Это не SARGable, требуется оптимизатор выполнить сканирование – SQLMenace

0
SELECT Id,WirelessId,RegNo,DriverName1,MobileNo1,DriverName2,MobileNo1 from 
DailySchedule where IsDeleted=0 and date_format(CreatedDate, "%Y-%m-%d")='2010-05-28' 
1

Если вы хотите, чтобы все записи для 28-го мая я бы

and CreatedDate >='20100528' 
and CreatedDate < '20100529' 

Обратите внимание, безопасный формат ISO (YYYYMMDD) нет черточки

Также взгляните на How Does Between Work With Dates In SQL Server?, чтобы узнать, почему между не может дать вам все результаты, которые вы хотите

0

Это должно работать слишком

select Id, 
    WirelessId, 
    RegNo, 
    DriverName1, 
    MobileNo1, 
    DriverName2, 
    MobileNo1 
from DailySchedule 
where IsDeleted=0 
    and CONVERT(varchar,CreatedDate,101) ='05/28/2010'