Вы должны знать, что GETDATE () возвращает текущую дату и время дня, а не только сегодняшнюю дату.
Если вы хотите вернуть строки, соответствующие сегодняшней дате, вам нужно извлечь часть даты.Есть несколько способов сделать это - например, в SQL Server 2008 вы можете использовать тип данных DATE
, но один общий способ, который работает с более ранними версиями SQL Server, заключается в следующем:
CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) )
Затем вы можете использовать запрос:
SELECT trainid, trainnum
FROM trains
WHERE trainstartdate = CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) )
, который будет работать при условии, что вы уверены, что дата / время в столбце train.trainstartdate является только датой (время дня = 0).
Если trainstartdate содержит дату / время начала, вы можете получить все сегодняшние поезда следующим образом:
SELECT trainid, trainnum
FROM trains
WHERE trainstartdate >= CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) )
AND trainstartdate < DATEADD(dd,1, CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) ))
Делая это так, а не конвертируя в строку, вы будете использовать любой индекс тамможет быть в столбце даты начала поезда.