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.