• If Field2 and Field3 are qtr/year values then you can re-arrange them to YY'Q'QTR so it's sortable. Next convert Field1 to the same format which will allow you to filter using BETWEEN.

    IF object_id('tempdb..#tbl') IS NOT NULL

    BEGIN

    DROP TABLE #tbl

    END

    -- Assumptions

    -- 1) Field2 <= Field3

    -- 2) Valid ranges for Field2 and Field3 are in the expected format and between [2000, 2099]

    -- 3) Field1 values can be converted to valid dates between [1/1/2000, 12/31/2099]

    -- 4) You are unable to implement a more appropriate design to the table at this time

    -- Create some test data

    CREATE TABLE #tbl (

    Field1 VARCHAR(8),

    Field2 VARCHAR(4),

    Field3 VARCHAR(4)

    )

    INSERT INTO #tbl(Field1, Field2, Field3)

    VALUES('20120908', '4Q12', '1Q13') -- Field1 is before range

    , ('20121108', '4Q12', '1Q13')-- Field1 is in range

    , ('20130408', '4Q12', '1Q13')-- Field1 is after range

    -- Test select

    SELECT *

    FROM #tbl

    WHERE RIGHT(LEFT(Field1, 4), 2) + 'Q' + CAST((MONTH(CONVERT(DATE, Field1, 112)) - 1) / 3 + 1 AS VARCHAR)

    BETWEEN RIGHT(Field2, 2) + 'Q' + LEFT(Field2, 1) AND RIGHT(Field3, 2) + 'Q' + LEFT(Field3, 1)