• Hmm, it's not clear to me what "fields" 2 and 3 contain, so I'll assume field2 has the "4Q" and field3 has "12".

    Just in case field1 is indexed, or it could be some day, let's avoid using functions on it (which is good technique anyway):

    SELECT *

    FROM dbo.tablename

    WHERE Field1 >= '20' + field3 + CASE field2

    WHEN '1Q' THEN '01'

    WHEN '2Q' THEN '04'

    WHEN '3Q' THEN '07'

    WHEN '4Q' THEN '10' ELSE '01' END + '01' AND

    Field1 < DATEADD(QUARTER, 1, '20' + field3 + CASE field2

    WHEN '1Q' THEN '01'

    WHEN '2Q' THEN '04'

    WHEN '3Q' THEN '07'

    WHEN '4Q' THEN '10' ELSE '01' END + '01')

    SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.