• I've just added this for reference purposes.

    -- declare temprary table to store dates

    DECLARE @tblDateTime TABLE ([DateTime] DATETIME);

    -- populate temporary dates to be used for reference purposes

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/01 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/02 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/03 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/04 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/05 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/06 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/07 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/08 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/09 15:00:00');

    INSERT INTO @tblDateTime ([DateTime]) VALUES ('2008/01/10 15:00:00');

    -- the following will not return the last date (2008/01/10')

    SELECT *

    FROM @tblDateTime

    WHERE

    [DateTime] BETWEEN '2008/01/01' AND '2008/01/10'

    -- the following will return the last date (2008/01/10'). second being the recommended version as it has a performance benifit over convert.

    SELECT *

    FROM @tblDateTime

    WHERE

    CONVERT(VARCHAR(max), [DateTime], 111) BETWEEN '2008/01/01' AND '2008/01/10'

    SELECT *

    FROM @tblDateTime

    WHERE

    DATEADD(dd, DATEDIFF(dd, 0, [DateTime]),0) BETWEEN ('2008/01/01') and ('2008/01/10')

    The first does not return a value as '2008/01/10' is read as '2008/01/10 00:00:00' and not '2008/01/10 23:59:59'.