Надежная защита, вероятно, будет конвертировать ваши строки в даты:
DECLARE @dateToFind datetime
SET @dateToFind = CONVERT(datetime, N'2011-04-02', 20)
SELECT * FROM [table] WHERE CONVERT(datetime, [datefield], 20) = @dateToFind
Или, если вам нужен диапазон:
DECLARE @startDate datetime, @endDate datetime
SELECT
@startDate = CONVERT(datetime, N'2011-04-01', 20),
@endDate = CONVERT(datetime, N'2011-04-30', 20)
SELECT * FROM [table] WHERE CONVERT(datetime, [datefield], 20) BETWEEN @startDate AND @endDate
Или вы можете конвертировать дважды:
SELECT * FROM [table] WHERE YEAR(CONVERT(datetime, [datefield], 20)) = 2011 AND MONTH(CONVERT(datetime, [datefield], 20)) = 4
Число 20 в конверте соответствует вашему формату даты.