• Lynn Pettis (1/15/2013)


    Can't believe I missed such an easy solution. I guess that's what I get for making things harder than the need to be at first.

    Except, I don't think it works.

    WITH SampleData (BipolarNumbers) AS (

    SELECT '1'

    UNION ALL SELECT '100231-A'

    UNION ALL SELECT '1003'

    UNION ALL SELECT '11'

    UNION ALL SELECT '11342'

    UNION ALL SELECT '11342-A'

    UNION ALL SELECT '12')

    SELECT BipolarNumbers

    FROM SampleData

    ORDER BY CAST(LEFT(BipolarNumbers

    ,CASE PATINDEX('%[^0-9]%', BipolarNumbers)

    WHEN 0 THEN LEN(BipolarNumbers)

    ELSE PATINDEX('%[^0-9]%', BipolarNumbers) - 1 END) AS INT);

    WITH SampleData (BipolarNumbers) AS (

    SELECT '1'

    UNION ALL SELECT '100231-A'

    UNION ALL SELECT '1003'

    UNION ALL SELECT '11'

    UNION ALL SELECT '11342'

    UNION ALL SELECT '11342-A'

    UNION ALL SELECT '11342-B'

    UNION ALL SELECT '12')

    SELECT BipolarNumbers

    FROM SampleData

    ORDER BY CAST(LEFT(BipolarNumbers

    ,CASE PATINDEX('%[^0-9]%', BipolarNumbers)

    WHEN 0 THEN LEN(BipolarNumbers)

    ELSE PATINDEX('%[^0-9]%', BipolarNumbers) - 1 END) AS INT)

    ,PATINDEX('%[^0-9]%', BipolarNumbers)

    This is what I get as a result:

    BipolarNumbers

    1

    11

    12

    1003

    11342

    11342-B

    11342-A

    100231-A